使用 VSTS CI 构建 C# Class 库和 NuGet 推送,如何定义 NuGet 包的名称?

Using a VSTS CI build for a C# Class Library and NuGet push, how do you define the name of the NuGet package?

我有一个针对 .NET 4.7.2 的 C# class 库,每当我推送提交时,我都会使用 VSTS 构建和部署到私有 NuGet 包提要。这一切都很好。

我还有一个针对 .NET 4.0 的遗留项目,我想在其中使用上述库。我创建了我的库的一个新分支并将其移植到目标 .NET 4.0(必须删除一些不受支持的功能)并创建了一个新的 VSTS CI 构建,该构建由对该分支的推送触发。同样,一切正常。

问题是生成的 NuGet 包只是显示为 .NET 4.7.2 的新版本!理想情况下,我希望在我的私人提要中显示 2 个包:MyPackageMyPackage.dotnet40

这可能吗?或者我应该做一些完全不同的事情吗?

已解决

感谢@DanielMann 在下面的回答,我通过向我的项目添加一个 .nuspec 文件并在我的 VSTS 构建定义中(稍微)重新配置我的 NuGet 包任务解决了这个问题:

  1. 在命令提示符
  2. 中导航到项目根目录(不是解决方案)
  3. 运行 nuget spec.csproj 文件旁边创建一个 .nuspec 文件(可能需要将 nuget.exe 添加到您的路径)
  4. 填写 .nuspec 文件。我替换了除 VSTS 自动替换的 $version$ 之外的所有占位符,但您可以在 Advanced>Additional build properties 下的 Nuget pack 任务中为所有占位符提供值。 重要的是 $id$ 占位符,将其更改为您想要的包名称
  5. .nuspec 添加到源代码管理和 commit/push
  6. 更新 NuGet 包任务,使其指向新的 .nuspec 文件而不是 .csproj 文件

您必须创建一个单独的提要并定位您的新项目。

如果您正在打包的项目有一个 .nuspec 文件,请更改 NuSpec 文件中的包名称。

如果它基于项目名称,请更改项目名称。

基本上,这里没有问题 -- 您分叉了代码库,因此您有两个完全独立的实体,您可以用它们做任何您想做的事。