我想安装一个包的旧版本(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 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].
下面是一些需要注意的事情:
这种方法不适用于从一个预发布版本降级到另一个预发布版本——它只适用于降级到发布版本
从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之前。
这个功能的文档在这里。