重命名 NuGet 包 ID 后如何定义后继包 ID

rit*_*gig 4 nuget nuget-package nuspec proget

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

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

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

如果用户打开 Visual Studio 解决方案的 NuGet 包管理窗口并安装了旧包 (ID OldLibrary1-1.0.0),他应该会看到包的更新/升级Library1-2.0.0

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

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

ziv*_*kan 6

NuGet 最近在它的 HTTP 协议中添加了弃用信息,但是,据我所知,只有 nuget.org 实现了它(它很新,NuGet 5.3,Visual Studio 16.3)。如果您的私有 nuget 服务器 (Proget) 尚未实现它,您可以尝试联系开发人员并要求他们实现它。

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

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