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

我知道自从msbuild 15(vs 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\2.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版本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>
上一篇:c# – .NET Core – 构建指定ReferencePath的项目


下一篇:c#,MSBuild Bootstrapper with wix,如何下载.net framework 3.5 SP1?