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

我该怎么做呢?


当前回答

我经常用Xavier的答案。我想补充的是,在NuGet的最新版本中,将包版本限制在指定的范围是简单而有用的。

例如,如果你从来不想要牛顿软。Json将更新过去的版本3.x。X在您的项目中,更改包中相应的包元素。配置文件看起来像这样:

<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之前。

这个功能的文档在这里。

其他回答

现在,它在Visual Studio 2015及以后的版本中非常简化。您可以在用户界面本身中进行降级/升级,而无需在Package Manager Console中执行命令。

右键单击项目,选择“管理NuGet包”。 请看下面的图片。 选择软件包并选择要安装的版本。

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

从NuGet 2.8开始,就有了降级包的功能。

NuGet 2.8发行说明

例子:

在Package Manager Console中输入以下命令将把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].

下面是一些需要注意的事情:

这种方法不适用于从一个预发布版本降级到另一个预发布版本——它只适用于降级到发布版本

我经常用Xavier的答案。我想补充的是,在NuGet的最新版本中,将包版本限制在指定的范围是简单而有用的。

例如,如果你从来不想要牛顿软。Json将更新过去的版本3.x。X在您的项目中,更改包中相应的包元素。配置文件看起来像这样:

<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之前。

这个功能的文档在这里。

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

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

试试下面的方法:

Uninstall-Package Newtonsoft.Json -Force

紧随其后的是:

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