【发布时间】:2018-10-18 19:53:35
【问题描述】:
我知道,自 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
适用于 .NET Framework 的 Microsoft (R) Build Engine 版本 15.8.168+ga8fba1ebd7 15.8.168.64424
msbuild /t:pack /p:configuration=release /p:NuspecFile=mylib.nuspec
引发异常:
C:\Program Files\dotnet\sdk\2.1.402\Sdks\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets(199,5):错误:值不能为空或空字符串。
奇怪的是dotnet sdk 2.1.402版本引发了异常。
我尝试使用 vs2017 安装 msbuild 及其路径,但它也引发了相同的异常。
当我用它的值替换变量时,msbuild 工作正常。
问题
这是 msbuild 版本 15.8.168.64424 中的错误还是我遗漏了什么?
也就是说,msbuild 能否支持使用包的元数据变量?
【问题讨论】:
-
当您运行
msbuild /t:pack时,MSBuild 会将您的.csproj转换为.nuspec文件。因此,您不应再使用自己的.nuspec。我认为msbuild与nuget的工作方式不同是有意的。如果你想要某些行为,你可以坚持nuget。当然也可以通过 GitHub github.com/Microsoft/msbuild/issues与微软大佬讨论
标签: c# msbuild nuget nuspec dotnet-sdk