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

2023-11-23

我知道自从 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) 构建引擎版本 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):错误:值不能为 null 或空细绳。

奇怪的是 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐