Azure DevOps "NuGet pack" 任务 ignores/overwrites 包元数据

Azure DevOps "NuGet pack" task ignores/overwrites package metadata

我在 Azure DevOps 中设置了一个简单的 CI 管道来构建 .NET5 NuGet 包,它看起来像这样

管道能够按预期成功打包和发布项目,但是当我去检查 NuGet 包时,我发现所有的包元数据都丢失了(除了版本,它是正确的,并且作者,这错误地将 ADO 生成代理的名称显示为作者)。我目前拥有位于 .csproj 文件中的所有包元数据。

显示不正确元数据的屏幕截图,这也是我查看管道生成的 NuGet 包中的 .nuspec 时显示的内容。当然,当我在本地机器上打包项目时,所有元数据都会按应有的方式生成。

我见过 one 其他 post 与此类似,其中作者将管道切换为使用 dotnet 任务而不是 MSBuild 任务。不幸的是,这对我来说不是一个选项,因为这个项目有 dotnet CLI 不支持的 COM 引用,所以 MSBuild 是我唯一的选择。

有谁知道为什么我的管道中的 'NuGet pack' 任务没有使用我的 .csproj 文件中的元数据?

Does anyone know why the 'NuGet pack' task in my pipeline is not using the metadata in my .csproj file?

根据文档Create a NuGet package using MSBuild

The command that creates a package, msbuild -t:pack, is functionally equivalent to dotnet pack.

或者您可以在 .csproj 文件中添加以下参数,这将在您使用 VS 构建任务构建项目时创建包:

<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

这个问题的解决方案最终变得有些简单。 'NuGet pack' 任务使用 nuget.exe CLI, which ignores metadata defined in the .csproj file. You have to create a .nuspec file,将所有元数据放入其中,并将该文件添加到 .csproj 文件所在的同一目录。一旦我这样做,我的 NuGet 包就生成了正确的元数据。