Wie installiere ich eine ältere Version des Pakets über NuGet?

384

Ich möchte eine ältere Version eines Pakets ( Newtonsoft.Json) installieren . Aber NuGet rollt zurück.

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

Jede Hilfe wird sehr geschätzt.

Nebide Yildiz
quelle
3
mögliches Duplikat von Download alte Version des Pakets mit Nuget
Dirk Vollmar

Antworten:

579

Versuche Folgendes:

Uninstall-Package Newtonsoft.Json -Force

gefolgt von:

Install-Package Newtonsoft.Json -Version <press tab key for autocomplete>
Xavier Decoster
quelle
twitterizer verwendet Newtonsoft.Json, ich muss älter installieren, ohne neuere zu deinstallieren. PM> Deinstallationspaket Newtonsoft.Json Deinstallationspaket: 'Newtonsoft.Json 4.0.8' kann nicht deinstalliert werden, da 'twitterizer 2.4.0.26532' davon abhängt.
Nebide Yildiz
9
Sie haben vorhandene Abhängigkeiten zum Paket nicht erwähnt, daher war ich mir dessen nicht bewusst: Versuchen Sie, den Schalter -Force zum Befehl uninstall-package (wie oben bearbeitet) hinzuzufügen
Xavier Decoster
Entschuldigung für mein Fehlen. -Force hat funktioniert und ich habe die ältere installiert. Ich danke dir sehr.
Nebide Yildiz
Bei der Deinstallation von EntityFramework 6 Beta zum Downgrade auf Version 5 wurden immer wieder Nachrichten angezeigt, in denen ich aufgefordert wurde, VS neu zu starten, um die Deinstallation abzuschließen. Dabei wurde die Nachricht jedoch nicht entfernt. Ich ging einfach in den Paketordner und löschte die verbleibende leere Baumstruktur von dort und es war dann erfolgreich
Simon_Weaver
@ Simon_Weaver Ich vermute, dass das EF 6-Paket etwas tut, das dies verursacht (bemerkte einen AppDomain-Code zum Beispiel in den PowerShell-Skripten, so dass VS wahrscheinlich an einigen der DLLs festhält)
Xavier Decoster
266

Ab Nuget 2.8 gibt es eine Funktion zum Downgrade eines Pakets.

Versionshinweise zu Nuget 2.8

Beispiel:

Der folgende in die Package Manager-Konsole eingegebene Befehl führt ein Downgrade des Couchbase-Clients auf Version 1.3.1.0 durch

Update-Package CouchbaseNetClient -Version 1.3.1.0

Ergebnis:

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

Beachten Sie Folgendes gemäß Crimbo:

"Dieser Ansatz funktioniert nicht für ein Downgrade von einer Vorabversion auf eine andere Vorabversion - er funktioniert nur für ein Downgrade auf eine Release-Version."

James Roland
quelle
13
Dies sollte nun die akzeptierte Antwort sein, da es die beste Lösung mit minimalem Aufwand ist.
Peter
Ja, funktioniert wie ein Zauber, einschließlich der Herabstufung aller Abhängigkeiten - perfekt
Peter
7
Leider funktioniert dieser Ansatz nicht für ein Downgrade von einer Vorabversion auf eine andere Vorabversion - er funktioniert nur für ein Downgrade auf eine Release-Version.
Crimbo
@ James Roland es wäre toll, wenn Sie die Vorfreigabewarnung von Crimbo auf die Antwort
eglasius
51

Ich habe Xaviers Antwort ziemlich oft benutzt. Ich möchte hinzufügen, dass das Beschränken der Paketversion auf einen bestimmten Bereich in den neuesten Versionen von NuGet einfach und nützlich ist.

Wenn Sie beispielsweise niemals Newtonsoft.Jsoneine frühere Version 3.x.xin Ihrem Projekt aktualisieren möchten , ändern Sie das entsprechende packageElement in Ihrer packages.configDatei folgendermaßen:

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

Beachten Sie das allowedVersionsAttribut. Dadurch wird die Version dieses Pakets auf Versionen zwischen 3.0( einschließlich ) und 4.0( exklusiv ) beschränkt. Wenn Sie dann eine Update-PackageGesamtlösung erstellen, müssen Sie sich keine Sorgen mehr machen, dass dieses bestimmte Paket in der Vergangenheit aktualisiert wird 3.x.x.

Die Dokumentation zu dieser Funktionalität finden Sie hier .

Ken
quelle
4
Sehr nützlich, um zu verhindern, dass NuGet-Updates Ihre Lösung beschädigen! (Microsoft.Net.Http v2.1.10, ich sehe dich an ...)
Douglas Barbin
6
Ich schaue auf JQuery 1.9 & 2.0.
Martin Brown
Microsoft.Owin für mich :-)
bikeman868
19

Ab Visual Studio 2015 + ist es jetzt sehr vereinfacht . Sie können dies Downgrade / Upgradeinnerhalb der Benutzeroberfläche selbst tun , ohne Befehle in der Package Manager-Konsole ausführen zu müssen.

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

  2. Schauen Sie sich das Bild unten an.

    • Select your Package and Choose the Version, die Sie installieren wollten.

Nuget Package Manager-Fenster des Projekts

Sehr sehr einfach, nicht wahr? :) Hoffe das hilft...

RajeshKdev
quelle
1
ja! Dies ist der
richtige
0

Eine weitere manuelle Option, um es zu bekommen:

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