Come installare una versione precedente del pacchetto tramite NuGet?


384

Voglio installare una versione precedente di un pacchetto ( Newtonsoft.Json). Ma NuGet torna indietro.

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

Qualsiasi aiuto sarà molto apprezzato.


Risposte:


579

prova quanto segue:

Uninstall-Package Newtonsoft.Json -Force

seguito da:

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

twitterizer utilizza Newtonsoft.Json, devo installare più vecchio senza disinstallare più nuovo. PM> Uninstall-Package Newtonsoft.Json Uninstall-Package: Impossibile disinstallare "Newtonsoft.Json 4.0.8" perché "twitterizer 2.4.0.26532" dipende da questo.
Nebide Yildiz,

9
Non hai menzionato dipendenze esistenti nel pacchetto, quindi non ero a conoscenza di ciò: prova ad aggiungere l'opzione -Force al comando di disinstallazione-pacchetto (come modificato sopra)
Xavier Decoster

Scusa per la mia scomparsa. -Force ha funzionato e ho installato quello più vecchio. Grazie mille.
Nebide Yildiz,

durante la disinstallazione di EntityFramework 6 beta per il downgrade alla versione 5 continuavo a ricevere messaggi che mi dicevano di riavviare VS per completare la disinstallazione, ma così facendo non rimossi il messaggio. Sono appena andato nella cartella dei pacchetti e ho eliminato la struttura ad albero vuota rimasta da lì e poi ha avuto successo
Simon_Weaver

@Simon_Weaver Ho il sospetto che il pkg EF 6 stia facendo qualcosa che lo causa (ho notato del codice AppDomain per esempio negli script di PowerShell, quindi probabilmente VS sta trattenendo alcuni dei dll)
Xavier Decoster

266

A partire da Nuget 2.8 esiste una funzione per il downgrade di un pacchetto.

Nuget 2.8 Note di rilascio

Esempio:

Il seguente comando immesso nella console di Package Manager eseguirà il downgrade del client couchbase alla versione 1.3.1.0

Update-Package CouchbaseNetClient -Version 1.3.1.0

Risultato:

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

Qualcosa da notare secondo il crimbo di seguito:

"questo approccio non funziona per il downgrade da una versione pre-release a un'altra versione pre-release - funziona solo per il downgrade a una versione di rilascio"


13
Questa dovrebbe ora essere la risposta accettata come la migliore soluzione con il minimo sforzo.
Peter,

Sì, funziona come un incantesimo, incluso il declassamento di tutte le dipendenze - perfetto
peter

7
Sfortunatamente questo approccio non funziona per il downgrade da una versione pre-release a un'altra versione pre-release - funziona solo per il downgrade a una versione di rilascio.
Crimbo,

@James Roland sarebbe fantastico se puoi evidenziare l'avvertimento pre-release di Crimbo sulla risposta
eglasius

51

Ho usato la risposta di Xavier un bel po '. Voglio aggiungere che limitare la versione del pacchetto a un intervallo specificato è facile e utile nelle ultime versioni di NuGet.

Ad esempio, se non vuoi mai Newtonsoft.Jsonessere aggiornato alla versione precedente 3.x.xnel tuo progetto, modifica l' packageelemento corrispondente nel tuo packages.configfile in questo modo:

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

Notare l' allowedVersionsattributo. Ciò limiterà la versione di quel pacchetto alle versioni tra 3.0( compreso ) ed 4.0( esclusivo ). Quindi, quando si esegue Update-Packageun'intera soluzione, non è necessario preoccuparsi che quel pacchetto specifico venga aggiornato alla versione precedente 3.x.x.

La documentazione per questa funzionalità è qui .


4
Molto utile per impedire agli aggiornamenti NuGet di interrompere la tua soluzione! (Microsoft.Net.Http v2.1.10, ti sto guardando ...)
Douglas Barbin,

6
Sto guardando JQuery 1.9 e 2.0.
Martin Brown,

Microsoft.Owin per me :-)
bikeman868 il

19

Ora è molto semplificato in Visual Studio 2015 + in poi. Puoi farlo Downgrade / Upgradeall'interno dell'interfaccia utente stessa, senza eseguire comandi nella console di Gestione pacchetti.

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

  2. Guarda l'immagine qui sotto.

    • Select your Package and Choose the Version, che si desidera installare.

Finestra Nuget Package Manager di Project

Molto molto semplice, no? :) Spero che sia di aiuto...


1
Sì! Questa è la strada da percorrere :)
Sindrome di Impostor

0

Un'altra opzione più manuale per ottenerlo:

.nuget\nuget.exe install Newtonsoft.Json -Version 4.0.5
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.