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


384

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

任何帮助将不胜感激。


Answers:


579

尝试以下方法:

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'依赖于此。
Nebide Yildiz 2012年

9
您没有提到该软件包的现有依赖关系,所以我没有意识到:尝试将-Force开关添加到uninstall-package命令(如上编辑)
Xavier Decoster 2012年

对不起,我很想念。-Force工作了,我安装了旧的。非常感谢。
Nebide Yildiz 2012年

卸载EntityFramework 6 Beta降级到版本5时,我一直收到消息,告诉我重新启动VS以完成卸载,但这样做并没有删除消息。我刚进入packages文件夹并从那里删除了剩余的空树结构,然后它成功了
Simon_Weaver13年

@Simon_Weaver我怀疑EF 6 pkg所做的事情会引起这种情况(例如在PowerShell脚本中注意到一些AppDomain代码,因此VS可能会保留某些dll)
Xavier Decoster

266

Nuget 2.8开始,具有降级软件包的功能。

Nuget 2.8发行说明

例:

将以下命令输入到Package Manager控制台中,会将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].

根据以下Crimbo的注意事项:

“此方法不适用于从一个预发行版本降级到另一个预发行版本-它仅适用于降级到发行版本”


13
现在,这应该是公认的答案,因为它是最省力的最佳解决方案。
彼得

是的,工作原理很吸引人,包括降级所有依赖项-完美
彼得

7
不幸的是,这种方法不适用于从一个预发行版本降级到另一个预发行版本-它仅适用于降级到发行版本。
crimbo 2014年

@James Roland如果您可以在答案上突出显示Crimbo的预发布警告,那就太好了
eglasius

51

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

例如,如果您不想在项目中Newtonsoft.Json更新到过去的版本3.x.x,请更改文件中的相应package元素,packages.config如下所示:

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

注意该allowedVersions属性。这会将该软件包的版本限制为3.0包含)和4.0排除)之间的版本。然后,当您Update-Package对整个解决方案进行处理时,就不必担心该特定软件包会在version之后更新3.x.x

此功能的文档在此处


4
防止NuGet更新破坏您的解决方案非常有用!(Microsoft.Net.Http v2.1.10,我在看着你...)
Douglas Barbin

6
我正在研究JQuery 1.9和2.0。
马丁·布朗

Microsoft.Owin对我来说:-)
bikeman868 '19

19

现在,它在Visual Studio 2015及更高版本中已大大简化。您可以Downgrade / Upgrade在用户界面本身中执行操作,而无需在Package Manager控制台中执行命令。

  1. Right click on your projectgo to Manage Nuget Packages

  2. 看下面的图片。

    • Select your Package and Choose the Version,您要安装。

项目的Nuget软件包管理器窗口

非常非常简单,不是吗?:) 希望这可以帮助...


1
是的!这是要走的路:)
冒名顶替综合症,

0

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

.nuget\nuget.exe install Newtonsoft.Json -Version 4.0.5
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.