NuGet 打包 Nuspec:值不能为 null 或空字符串。参数名称:值

NuGet Packing a Nuspec: Value cannot be null or empty string. Parameter name: value

我正在为一个网站打包一堆 javascript。这是我的 .nuspec 的样子。

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <version>$version$</version>
    <authors>Author Person</authors>
    <owners>Company Name</owners>
    <id>PackageNameId</id>
    <title>PackageNameId</title>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Description text stuff</description>
    <copyright>Company Copyright Info</copyright>
  </metadata>
  <files>
    <file src="www\**" target="" />  <!--It just packages everything in the www folder in the same directory as this .nuspec -->
  </files>
</package>

它只是打包 www 文件夹中的所有内容。 $version$ 令牌应该被 TFS 中的 NugetPackage 版本标志替换(我正在构建的内容)。

我没有看到任何名为 value 的东西,所以我真的不知道为什么会抛出错误。

这是完整的错误:

Attempting to build package from 'PackageName.nuspec'.

##[error]Value cannot be null or an empty string.

##[error]Parameter name: value

我使用了一个我正在使用的现有包并删除了版本(例如 <version></version>)。我尝试 运行 nuget pack mypackage.nuspec:

时遇到的错误
Attempting to build package from 'mypackage.nuspec'.
Value cannot be null or an empty string.
Parameter name: value

nuspec 文件需要 4 个值:

  • 编号
  • 版本
  • 作者
  • 描述

既然你收到了这个错误,我猜你的 $version$ 令牌没有被正确传递或使用。

我怀疑您在 nuspec 文件而不是 csproj 文件中收到此错误 运行 nuget pack

据我了解open NuGet issue, AssemblyInfo token replacement (e.g. <version>$version$</version>) only works if you're calling nuget pack on your .csproj or .vbproj file. Quoting from NuGet documentation

Using the project file directly is necessary for token replacement because the project is the source of the token values. Token replacement does not happen if you use nuget pack with a .nuspec file.