ChatGPT解决这个技术问题 Extra ChatGPT

如何通过 NuGet 安装旧版本的包?

我想安装旧版本的软件包 (Newtonsoft.Json)。但 NuGet 回滚:

PM> Install-Package Newtonsoft.Json -Version 4.0.5
Successfully installed 'Newtonsoft.Json 4.0.5'.
Install failed. Rolling back...
Install-Package : Already referencing a newer version of 'Newtonsoft.Json'.

我该怎么做?


P
Peter Mortensen

尝试以下操作:

Uninstall-Package Newtonsoft.Json -Force

其次是:

Install-Package Newtonsoft.Json -Version <press tab key for autocomplete>

twitterizer 使用 Newtonsoft.Json,我必须安装旧版本而不卸载新版本。 PM> Uninstall-Package Newtonsoft.Json Uninstall-Package:无法卸载“Newtonsoft.Json 4.0.8”,因为“twitterizer 2.4.0.26532”依赖于它。
您没有提到包的现有依赖项,所以我没有意识到这一点:尝试将 -Force 开关添加到卸载包命令(如上编辑)
对不起我的失踪。 -强制工作,我安装了旧的。太感谢了。
在卸载 EntityFramework 6 beta 以降级到版本 5 时,我不断收到消息,告诉我重新启动 VS 以完成卸载,但这样做并没有删除该消息。我刚刚进入包文件夹并从那里删除了剩余的空树结构,然后就成功了
@Simon_Weaver 我怀疑 EF 6 pkg 正在做一些导致这种情况的事情(例如在 PowerShell 脚本中注意到一些 AppDomain 代码,因此 VS 可能会保留一些 dll)
P
Peter Mortensen

从 NuGet 2.8 开始,有一个功能可以降级包。

NuGet 2.8 Release Notes

例子:

输入包管理器控制台的以下命令会将 Couchbase 客户端降级到版本 1.3.1.0。

Update-Package CouchbaseNetClient -Version 1.3.1.0

结果:

Updating 'CouchbaseNetClient' from version '1.3.3' to '1.3.1.0' in project [project name].
Removing 'CouchbaseNetClient 1.3.3' from [project name].
Successfully removed 'CouchbaseNetClient 1.3.3' from [project name].

以下注意事项as per crimbo

此方法不适用于从一个预发布版本降级到其他预发布版本 - 它仅适用于降级到发布版本


这现在应该是公认的答案,因为它是最省力的最佳解决方案。
是的,就像一个魅力,包括降级所有依赖项 - 完美
不幸的是,这种方法不适用于从一个预发布版本降级到另一个预发布版本 - 它仅适用于降级到发布版本。
@James Roland 如果您可以在答案中突出显示预发布警告,那就太好了
P
Peter Mortensen

我已经使用了很多 Xavier's answer。我想补充一点,在最新版本的 NuGet 中,将包版本限制在指定范围内既简单又有用。

例如,如果您不希望在您的项目中将 Newtonsoft.Json 更新为旧版本 3.x.x,请将 packages.config 文件中相应的 package 元素更改为如下所示:

<package id="Newtonsoft.Json" version="3.5.8" allowedVersions="[3.0, 4.0)" targetFramework="net40" />

注意 allowedVersions 属性。这会将软件包的版本限制为 3.0inclusive)和 4.0exclusive)之间的版本。然后,当您对整个解决方案执行 Update-Package 时,您无需担心该特定软件包会更新到版本 3.x.x 之后。

此功能的文档是 here


对于防止 NuGet 更新破坏您的解决方案非常有用! (Microsoft.Net.Http v2.1.10,我在看你……)
我正在查看 JQuery 1.9 和 2.0。
Microsoft.Owin 对我来说 :-)
P
Peter Mortensen

现在,它在 Visual Studio 2015 及更高版本中得到了极大的简化。您可以在用户界面本身内进行降级/升级,而无需在包管理器控制台中执行命令。

右键单击您的项目并*转到管理 NuGet 包。看下图。选择您的软件包并选择您要安装的版本。

https://i.stack.imgur.com/AvOkE.png

非常非常简单,不是吗? :)


是的!这是要走的路 :)
k
knocte

另一个更手动的选择:

.nuget\nuget.exe install Newtonsoft.Json -Version 4.0.5

非常适合那些编程工具集包括一个好的编程编辑器、尾巴和网络浏览器的人 =)