【问题标题】:How can I install an older version of a package via NuGet?如何通过 NuGet 安装旧版本的包?
【发布时间】:2012-04-18 08:59:38
【问题描述】:

我想安装旧版本的软件包 (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'.

我该怎么做?

【问题讨论】:

标签: nuget nuget-package


【解决方案1】:

尝试以下方法:

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 开关添加到卸载包命令(如上编辑)
  • 对不起我的失踪。 -Force工作了,我安装了旧的。非常感谢。
  • 在卸载 EntityFramework 6 beta 以降级到版本 5 时,我不断收到消息,告诉我重新启动 VS 以完成卸载,但这样做并没有删除该消息。我刚刚进入包文件夹并从那里删除了剩余的空树结构,然后它就成功了
  • @Simon_Weaver 我怀疑 EF 6 pkg 正在做一些导致这种情况的事情(例如在 PowerShell 脚本中注意到一些 AppDomain 代码,因此 VS 可能会保留一些 dll)
【解决方案2】:

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 如果您可以在答案中突出显示预发布警告,那就太好了
【解决方案3】:

我已经使用了很多 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.0包含)和4.0独占)之间的版本。然后,当您对整个解决方案执行 Update-Package 时,您无需担心该特定软件包会更新到旧版本 3.x.x

此功能的文档是here

【讨论】:

  • 对于防止 NuGet 更新破坏您的解决方案非常有用! (Microsoft.Net.Http v2.1.10,我看着你……)
  • 我在看 JQuery 1.9 & 2.0。
  • Microsoft.Owin 对我来说 :-)
【解决方案4】:

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

  1. 右键单击您的项目并*转到管理 NuGet 包

  2. 看下图。

    • Select your Package and Choose the Version,你想安装它。

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

【讨论】:

  • 是的!这是要走的路:)
【解决方案5】:

获取它的另一个更手动的选项:

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

【讨论】:

  • 非常适合那些编程工具集包括一个好的编程编辑器、尾部和网络浏览器 =)
猜你喜欢
  • 2010-12-06
  • 2014-07-19
  • 2019-05-17
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
相关资源
最近更新 更多