Bagaimana cara menginstal versi paket yang lebih lama melalui NuGet?


384

Saya ingin menginstal versi paket yang lebih lama ( Newtonsoft.Json). Tapi NuGet kembali.

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

Bantuan apa pun akan sangat dihargai.


Jawaban:


579

coba yang berikut ini:

Uninstall-Package Newtonsoft.Json -Force

diikuti oleh:

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

Twitterizer menggunakan Newtonsoft.Json, saya harus menginstal yang lebih lama tanpa menghapus yang lebih baru. PM> Uninstall-Package Newtonsoft.Json Uninstall-Package: Tidak dapat menghapus 'Newtonsoft.Json 4.0.8' karena 'twitterizer 2.4.0.26532' tergantung padanya.
Nebide Yildiz

9
Anda tidak menyebutkan dependensi yang ada pada paket, jadi saya tidak mengetahui hal itu: coba tambahkan tombol -Force ke perintah uninstall-paket (seperti yang diedit di atas)
Xavier Decoster

Maaf saya hilang. -Paksa bekerja dan saya menginstal yang lebih lama. Terima kasih banyak.
Nebide Yildiz

ketika mencopot pemasangan EntityFramework 6 beta untuk menurunkan versi ke versi 5, saya terus menerima pesan yang mengatakan kepada saya untuk memulai kembali VS untuk menyelesaikan pencopotan tetapi hal itu tidak menghapus pesan. Saya baru saja masuk ke folder paket dan menghapus struktur pohon kosong yang tersisa dari sana dan kemudian berhasil
Simon_Weaver

@Simon_Weaver Saya curiga EF 6 pkg melakukan sesuatu yang menyebabkan hal ini (perhatikan beberapa kode AppDomain misalnya dalam skrip PowerShell, jadi kemungkinan VS berpegangan pada beberapa dll)
Xavier Decoster

266

Pada Nuget 2.8 ada fitur untuk menurunkan versi paket.

Nuget 2.8 Catatan Rilis

Contoh:

Perintah berikut yang dimasukkan ke dalam Package Manager Console akan menurunkan versi klien couchbase ke versi 1.3.1.0

Update-Package CouchbaseNetClient -Version 1.3.1.0

Hasil:

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

Sesuatu yang perlu diperhatikan sesuai crimbo di bawah ini:

"pendekatan ini tidak berfungsi untuk menurunkan versi dari satu versi pra-rilis ke versi pra-rilis lainnya - ini hanya berfungsi untuk menurunkan versi ke versi rilis"


13
Ini sekarang harus menjadi jawaban yang diterima sebagai solusi terbaik dengan usaha minimal.
Peter

Ya, bekerja seperti pesona, termasuk menurunkan semua dependensi - sempurna
peter

7
Sayangnya pendekatan ini tidak berfungsi untuk menurunkan versi dari satu versi pra-rilis ke versi pra-rilis lainnya - hanya berfungsi untuk menurunkan versi ke versi rilis.
crimbo

@ James Roland, alangkah baiknya jika Anda dapat menyoroti peringatan sebelum peluncuran oleh crimbo pada jawabannya
eglasius

51

Saya sudah menggunakan sedikit jawaban Xavier. Saya ingin menambahkan bahwa membatasi versi paket ke rentang yang ditentukan mudah dan berguna dalam versi terbaru NuGet.

Misalnya, jika Anda tidak pernah ingin Newtonsoft.Jsondiperbarui versi masa lalu 3.x.xdalam proyek Anda, ubah packageelemen yang sesuai dalam packages.configfile Anda menjadi seperti ini:

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

Perhatikan allowedVersionsatributnya. Ini akan membatasi versi paket itu untuk versi antara 3.0( inklusif ) dan 4.0( eksklusif ). Kemudian, ketika Anda melakukan Update-Packagekeseluruhan solusi, Anda tidak perlu khawatir tentang paket tertentu yang diperbarui versi masa lalu 3.x.x.

Dokumentasi untuk fungsi ini ada di sini .


4
Sangat berguna untuk mencegah pembaruan NuGet dari pemecahan solusi Anda! (Microsoft.Net.Http v2.1.10, saya melihat Anda ...)
Douglas Barbin

6
Saya sedang melihat JQuery 1.9 & 2.0.
Martin Brown

Microsoft.Owin untuk saya :-)
bikeman868

19

Sekarang, ini sangat disederhanakan dalam Visual Studio 2015 + dan seterusnya. Anda bisa melakukannya Downgrade / Upgradedi dalam antarmuka pengguna itu sendiri, tanpa mengeksekusi perintah di Package Manager Console.

  1. Right click on your projectdan go to Manage Nuget Packages.

  2. Lihatlah gambar di bawah ini.

    • Select your Package and Choose the Version, yang ingin Anda instal.

Jendela Project Package Nuget Package

Sangat Sangat Sederhana, bukan? :) Semoga ini membantu...


1
ya! Ini adalah jalannya :)
Impostor Syndrome

0

Opsi lain yang lebih manual untuk mendapatkannya:

.nuget\nuget.exe install Newtonsoft.Json -Version 4.0.5
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.