4

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

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

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

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

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

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

4

1 回答 1

6

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

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

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

于 2019-10-28T13:08:52.250 回答