如何在重命名 NuGet 包 ID 后定义后续包 ID

How to define the successor package ID after a rename of the NuGet Package ID

我知道,您不应该更改 NuGet 包的包 ID。但我做到了,因为一个大的重构。

现在我想知道是否有合适的方法来定义后继 NuGet 包。

Nuspec 中的旧 ID:OldLibrary1
Nuspec/csproj 文件中的新 ID:Library1

如果用户打开 Visual Studio 解决方案的 NuGet 包管理 window 并且安装了旧包(ID OldLibrary1-1.0.0),他应该看到 update/upgrade打包 Library1-2.0.0.

是否有可能以某种方式定义它?

顺便说一句,我使用 ProGet 作为 NuGet 服务器。

NuGet 最近添加了 deprecation information 到它的 HTTP 协议,然而,据我所知,只有 nuget.org 实现了它(它很新,NuGet 5.3,Visual Studio 16.3) .如果你的私有nuget服务器(Proget)还没有实现,你可以尝试联系开发者让他们实现。

否则,我听说过的最佳选择是创建旧库的新版本,不在其中包含任何程序集,只对新包 ID 具有 NuGet 依赖性。

问题在于,如果您的包消费者正在使用 PackageReference,Visual Studio 的升级体验还不是很好,因为当您发布新包的新版本时,人们将其作为旧包的传递依赖项将不会收到有关可用升级的通知。解决此问题的一个选项是 include a MSBuild targets file,它会在每次构建时显示一个构建警告,告诉他们安装新包并卸载旧包。忽略警告的人不会看到它,所以如果你想极端一点,把它变成一个错误,但它有助于传达信息。