使用 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 个包:MyPackage
和 MyPackage.dotnet40
这可能吗?或者我应该做一些完全不同的事情吗?
已解决
感谢@DanielMann 在下面的回答,我通过向我的项目添加一个 .nuspec
文件并在我的 VSTS 构建定义中(稍微)重新配置我的 NuGet 包任务解决了这个问题:
- 在命令提示符
中导航到项目根目录(不是解决方案)
- 运行
nuget spec
在 .csproj
文件旁边创建一个 .nuspec
文件(可能需要将 nuget.exe
添加到您的路径)
- 填写
.nuspec
文件。我替换了除 VSTS 自动替换的 $version$
之外的所有占位符,但您可以在 Advanced>Additional build properties 下的 Nuget pack 任务中为所有占位符提供值。 重要的是 $id$
占位符,将其更改为您想要的包名称
- 将
.nuspec
添加到源代码管理和 commit/push
- 更新 NuGet 包任务,使其指向新的
.nuspec
文件而不是 .csproj
文件
您必须创建一个单独的提要并定位您的新项目。
如果您正在打包的项目有一个 .nuspec
文件,请更改 NuSpec 文件中的包名称。
如果它基于项目名称,请更改项目名称。
基本上,这里没有问题 -- 您分叉了代码库,因此您有两个完全独立的实体,您可以用它们做任何您想做的事。
我有一个针对 .NET 4.7.2 的 C# class 库,每当我推送提交时,我都会使用 VSTS 构建和部署到私有 NuGet 包提要。这一切都很好。
我还有一个针对 .NET 4.0 的遗留项目,我想在其中使用上述库。我创建了我的库的一个新分支并将其移植到目标 .NET 4.0(必须删除一些不受支持的功能)并创建了一个新的 VSTS CI 构建,该构建由对该分支的推送触发。同样,一切正常。
问题是生成的 NuGet 包只是显示为 .NET 4.7.2 的新版本!理想情况下,我希望在我的私人提要中显示 2 个包:MyPackage
和 MyPackage.dotnet40
这可能吗?或者我应该做一些完全不同的事情吗?
已解决
感谢@DanielMann 在下面的回答,我通过向我的项目添加一个 .nuspec
文件并在我的 VSTS 构建定义中(稍微)重新配置我的 NuGet 包任务解决了这个问题:
- 在命令提示符 中导航到项目根目录(不是解决方案)
- 运行
nuget spec
在.csproj
文件旁边创建一个.nuspec
文件(可能需要将nuget.exe
添加到您的路径) - 填写
.nuspec
文件。我替换了除 VSTS 自动替换的$version$
之外的所有占位符,但您可以在 Advanced>Additional build properties 下的 Nuget pack 任务中为所有占位符提供值。 重要的是$id$
占位符,将其更改为您想要的包名称 - 将
.nuspec
添加到源代码管理和 commit/push - 更新 NuGet 包任务,使其指向新的
.nuspec
文件而不是.csproj
文件
您必须创建一个单独的提要并定位您的新项目。
如果您正在打包的项目有一个 .nuspec
文件,请更改 NuSpec 文件中的包名称。
如果它基于项目名称,请更改项目名称。
基本上,这里没有问题 -- 您分叉了代码库,因此您有两个完全独立的实体,您可以用它们做任何您想做的事。