Msbuild v15 无法解析 nuspec 文件的元数据变量

Msbuild v15 can't resolve the variables of metadata of nuspec file

我知道自从 msbuild 15(与 2017 相比)发布以来,NuGet 现在已完全集成到 MSBuild 中。

我有一个 nuspec 文件,其中定义了包属性的变量,例如:

    <metadata>
        <id>$id$</id>
        <version>$version$</version>  
        <authors>$authors$</authors>
    ...
    </metadata> 

nuspec 文件位于项目的同一文件夹中。

当使用 nuget 工具创建包时,它工作正常。

    nuget pack   

使用 msbuild v15 时,引发异常。

运行命令:

    msbuild -version

Microsoft (R) Build Engine version 15.8.168+ga8fba1ebd7 for .NET Framework 15.8.168.64424

    msbuild  /t:pack /p:configuration=release    /p:NuspecFile=mylib.nuspec

引发异常:

C:\Program Files\dotnet\sdk.1.402\Sdks\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets(199,5): error : Value cannot be null or an empty string.

奇怪的是dotnet sdk version 2.1.402引发了异常。

我尝试使用 vs2017 安装的 msbuild 及其路径,它也引发了同样的异常。

当我用它的值替换变量时,msbuild 工作正常。

问题

这是 msbuild 版本 15.8.168.64424 中的错误还是我遗漏了什么?

换句话说,msbuild是否支持使用包的元数据变量?

如评论中所述,您不再需要 Nuspec 文件,因为大多数方面都可以通过 csproj 文件中的属性或项目的附加元数据进行控制(例如,如果您需要附加内容)。

如果出于某种原因确实需要 nuspec 文件,则需要自己提供用于替换的变量。您可以在 csproj 文件内的目标中执行此操作,如下所示:

<Target Name="SetNuspecProperties" BeforeTargets="GenerateNuspec">
  <PropertyGroup>
    <NuspecProperties>$(NuspecProperties);id=$(AssemblyName)</NuspecProperties>
    <NuspecProperties>$(NuspecProperties);config=$(Configuration)</NuspecProperties>
    <NuspecProperties>$(NuspecProperties);version=$(PackageVersion)</NuspecProperties>
    <NuspecProperties>$(NuspecProperties);description=$(Description)</NuspecProperties>
    <NuspecProperties>$(NuspecProperties);authors=$(Authors)</NuspecProperties>
  </PropertyGroup>
</Target>