When pack encounters an empty version string in a dependency node it should include the line number in the error message. Today it only says
> error : '' is not a valid version string.
That is fine for small nuspec. But when your nuspec has 20+ entries where every single version is a replacement string then it's a bit madenning to track down which one has a typo in your build script.
Example of a problem nuspec file:
<dependencies>
<group targetFramework="netstandard1.3">
<dependency id="Microsoft.CodeAnalysis.Analyzers" version="$MicrosoftCodeAnalysisAnalyzersVersion$" />
<dependency id="System.AppContext" version="$SystemAppContextVersion$"/>
<dependency id="System.Collections" version="$SystemCollectionsVersion$"/>
<dependency id="System.Collections.Concurrent" version="$SystemCollectionsConcurrentVersion$"/>
<dependency id="System.Collections.Immutable" version="$SystemCollectionsImmutableVersion$"/>
<dependency id="System.Console" version="$SystemConsoleVersion$"/>
<dependency id="System.Diagnostics.Debug" version="$SystemDiagnosticsDebugVersion$"/>
<dependency id="System.Diagnostics.FileVersionInfo" version="$SystemDiagnosticsFileVersionInfoVersion$" exclude="Compile" />
<dependency id="System.Diagnostics.StackTrace" version="$SystemDiagnosticsStackTraceVersion$" exclude="Compile" />
<dependency id="System.Diagnostics.Tools" version="$SystemDiagnosticsToolsVersion$"/>
<dependency id="System.Dynamic.Runtime" version="$SystemDynamicRuntimeVersion$"/>
<dependency id="System.Globalization" version="$SystemGlobalizationVersion$"/>
<dependency id="System.IO.Compression" version="$SystemIOCompressionVersion$" />
<dependency id="System.IO.FileSystem" version="$SystemIOFileSystemVersion$"/>
<dependency id="System.IO.FileSystem.Primitives" version="$SystemIOFileSystemPrimitivesVersion$"/>
<dependency id="System.Linq" version="$SystemLinqVersion$"/>
<dependency id="System.Linq.Expressions" version="$SystemLinqExpressionsVersion$"/>
<dependency id="System.Reflection" version="$SystemReflectionVersion$"/>
<dependency id="System.Reflection.Metadata" version="$SystemReflectionMetadataVersion$"/>
<dependency id="System.Resources.ResourceManager" version="$SystemResourcesResourceManagerVersion$"/>
<dependency id="System.Runtime" version="$SystemRuntimeVersion$"/>
<dependency id="System.Runtime.Extensions" version="$SystemRuntimeExtensionsVersion$"/>
<dependency id="System.Runtime.InteropServices" version="$SystemRuntimeInteropServicesVersion$"/>
<dependency id="System.Runtime.Numerics" version="$SystemRuntimeNumericsVersion$"/>
<dependency id="System.Security.Cryptography.Algorithms" version="$SystemSecurityCryptographyAlgorithmsVersion$"/>
<dependency id="System.Security.Cryptography.Encoding" version="$SystemSecurityCryptographyEncodingVersion$"/>
<dependency id="System.Security.Cryptography.X509Certificates" version="$SystemSecurityCryptographyX509CertificatesVersion$"/>
<dependency id="System.Text.Encoding" version="$SystemTextEncodingVersion$"/>
<dependency id="System.Text.Encoding.CodePages" version="$SystemTextEncodingCodePagesVersion$" exclude="Compile" />
<dependency id="System.Text.Encoding.Extensions" version="$SystemTextEncodingExtensionsVersion$"/>
<dependency id="System.Threading" version="$SystemThreadingVersion$" exclude="Compile" />
<dependency id="System.Threading.Tasks" version="$SystemThreadingTasksVersion$"/>
<dependency id="System.Threading.Tasks.Parallel" version="$SystemThreadingTasksParallelVersion$"/>
<dependency id="System.Threading.Thread" version="$SystemThreadingThreadVersion$" exclude="Compile" />
<dependency id="System.ValueTuple" version="$SystemValueTupleVersion$" />
<dependency id="System.Xml.ReaderWriter" version="$SystemXmlReaderWriterVersion$"/>
<dependency id="System.Xml.XDocument" version="$SystemXmlXDocumentVersion$"/>
<dependency id="System.Xml.XmlDocument" version="$SystemXmlXmlDocumentVersion$" exclude="Compile" />
<dependency id="System.Xml.XPath.XDocument" version="$SystemXmlXPathXDocumentVersion$" exclude="Compile" />
</group>
</dependencies>
When pack encounters an empty version string in a dependency node it should include the line number in the error message. Today it only says
That is fine for small nuspec. But when your nuspec has 20+ entries where every single version is a replacement string then it's a bit madenning to track down which one has a typo in your build script.
Example of a problem nuspec file: