Làm cách nào để cài đặt phiên bản cũ hơn của gói qua NuGet?


384

Tôi muốn cài đặt phiên bản cũ hơn của gói ( Newtonsoft.Json). Nhưng NuGet cuộn lại.

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'.

Chúng tôi rất trân trọng bất kỳ sự giúp đỡ nào.


Câu trả lời:


579

hãy thử như sau:

Uninstall-Package Newtonsoft.Json -Force

theo dõi bởi:

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

twitterizer sử dụng Newtonsoft.Json, tôi phải cài đặt cũ hơn mà không cần gỡ cài đặt mới hơn. PM> Gỡ cài đặt-Gói Newtonsoft.Json Gỡ cài đặt-Gói: Không thể gỡ cài đặt 'Newtonsoft.Json 4.0.8' vì 'twitterizer 2.4.0.26532' phụ thuộc vào nó.
Nebide Yildiz

9
Bạn đã không đề cập đến các phụ thuộc hiện có cho gói vì vậy tôi không biết về điều đó: hãy thử thêm công tắc -Force vào lệnh gỡ cài đặt gói (như đã chỉnh sửa ở trên)
Xavier Decoster

Xin lỗi vì sự mất tích của tôi. -Force làm việc và tôi đã cài đặt cái cũ hơn. Cảm ơn bạn rất nhiều.
Nebide Yildiz

Khi gỡ cài đặt EntityFramework 6 beta để hạ cấp xuống phiên bản 5, tôi liên tục nhận được thông báo bảo tôi khởi động lại VS để hoàn tất việc gỡ cài đặt nhưng làm như vậy không xóa tin nhắn. Tôi vừa đi vào thư mục gói và xóa cấu trúc cây trống còn lại từ đó và nó đã thành công
Simon_Weaver

@Simon_Weaver Tôi nghi ngờ pkg EF 6 đang làm điều gì đó gây ra điều này (ví dụ như một số mã AppDomain trong các tập lệnh PowerShell, vì vậy rất có thể VS đang giữ một số dll)
Xavier Decoster

266

Kể từ Nuget 2.8, có một tính năng để hạ cấp gói.

Ghi chú phát hành Nuget 2.8

Thí dụ:

Lệnh sau được nhập vào Bảng điều khiển quản lý gói sẽ hạ cấp máy khách couchbase xuống phiên bản 1.3.1.0

Update-Package CouchbaseNetClient -Version 1.3.1.0

Kết quả:

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].

Một số điều cần lưu ý theo crimbo dưới đây:

"Cách tiếp cận này không hoạt động để hạ cấp từ một phiên bản phát hành trước sang phiên bản phát hành trước khác - nó chỉ hoạt động để hạ cấp xuống phiên bản phát hành"


13
Đây sẽ là câu trả lời được chấp nhận vì đây là giải pháp tốt nhất với nỗ lực tối thiểu.
Peter

Vâng, hoạt động như một cơ duyên, bao gồm hạ cấp tất cả các phụ thuộc - hoàn hảo
peter

7
Thật không may, cách tiếp cận này không hoạt động để hạ cấp từ một phiên bản phát hành trước sang một phiên bản phát hành trước khác - nó chỉ hoạt động để hạ cấp xuống phiên bản phát hành.
Crimbo

@James Roland thật tuyệt nếu bạn có thể làm nổi bật cảnh báo trước khi phát hành bằng crimbo trên câu trả lời
eglasius

51

Tôi đã sử dụng câu trả lời của Xavier khá nhiều. Tôi muốn thêm rằng việc giới hạn phiên bản gói trong phạm vi được chỉ định là dễ dàng và hữu ích trong các phiên bản mới nhất của NuGet.

Ví dụ: nếu bạn không bao giờ muốn Newtonsoft.Jsonđược cập nhật phiên bản trước 3.x.xtrong dự án của mình, hãy thay đổi thành packagephần tương ứng trong packages.configtệp của bạn thành như sau:

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

Chú ý allowedVersionsthuộc tính. Điều này sẽ giới hạn phiên bản của gói đó ở các phiên bản giữa 3.0( bao gồm ) và 4.0( độc quyền ). Sau đó, khi bạn thực hiện Update-Packagetoàn bộ giải pháp, bạn không cần phải lo lắng về việc gói cụ thể đó được cập nhật phiên bản trước 3.x.x.

Các tài liệu cho chức năng này là ở đây .


4
Rất hữu ích để ngăn chặn các cập nhật NuGet phá vỡ giải pháp của bạn! (Microsoft.Net.Http v2.1.10, tôi đang nhìn bạn ...)
Douglas Barbin 16/07/13

6
Tôi đang xem JQuery 1.9 & 2.0.
Martin Brown

Microsoft.Owin cho tôi :-)
bikeman868

19

Bây giờ, nó đã được đơn giản hóa rất nhiều trong Visual Studio 2015 + trở đi. Bạn có thể thực hiện Downgrade / Upgradetrong chính giao diện Người dùng mà không cần thực thi các lệnh trong Bảng điều khiển Trình quản lý gói.

  1. Right click on your projectgo to Manage Nuget Packages.

  2. Nhìn vào hình ảnh dưới đây.

    • Select your Package and Choose the Version, mà bạn muốn cài đặt.

Cửa sổ Trình quản lý gói Nuget của Dự án

Rất rất đơn giản phải không? :) Hi vọng điêu nay co ich...


1
Vâng! Đây là con đường để đi :)
Hội chứng kẻ mạo danh

0

Một tùy chọn thủ công khác để có được nó:

.nuget\nuget.exe install Newtonsoft.Json -Version 4.0.5
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.