Comment installer une ancienne version de package via NuGet?

384

Je souhaite installer une ancienne version d'un package ( Newtonsoft.Json). Mais NuGet fait marche arrière.

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

Toute aide sera fortement appréciée.

Nebide Yildiz
la source
3
doublon possible de Télécharger l'ancienne version du paquet avec nuget
Dirk Vollmar

Réponses:

579

essayez ce qui suit:

Uninstall-Package Newtonsoft.Json -Force

suivi par:

Install-Package Newtonsoft.Json -Version <press tab key for autocomplete>
Xavier Decoster
la source
twitterizer utilise Newtonsoft.Json, je dois installer plus ancien sans désinstaller plus récent. PM> Uninstall-Package Newtonsoft.Json Uninstall-Package: Impossible de désinstaller «Newtonsoft.Json 4.0.8» car «twitterizer 2.4.0.26532» en dépend.
Nebide Yildiz
9
Vous n'avez pas mentionné de dépendances existantes au package, donc je n'en étais pas conscient: essayez d'ajouter le commutateur -Force à la commande uninstall-package (comme modifié ci-dessus)
Xavier Decoster
Désolé pour ma disparition. -Force a fonctionné et j'ai installé l'ancien. Merci beaucoup.
Nebide Yildiz
lors de la désinstallation de EntityFramework 6 beta pour rétrograder vers la version 5, je continuais à recevoir des messages me disant de redémarrer VS pour terminer la désinstallation, mais cela ne supprimait pas le message. Je suis juste allé dans le dossier packages et j'ai supprimé la structure arborescente vide restante et cela a ensuite réussi
Simon_Weaver
@Simon_Weaver Je soupçonne que le paquet EF 6 fait quelque chose qui provoque cela (a remarqué du code AppDomain par exemple dans les scripts PowerShell, donc VS est probablement en train de s'accrocher à certaines DLL)
Xavier Decoster
266

Depuis Nuget 2.8, il existe une fonctionnalité pour rétrograder un package.

Notes de mise à jour de Nuget 2.8

Exemple:

La commande suivante entrée dans la console du gestionnaire de packages rétrogradera le client couchbase vers la version 1.3.1.0

Update-Package CouchbaseNetClient -Version 1.3.1.0

Résultat:

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

Quelque chose à noter selon le crimbo ci-dessous:

"cette approche ne fonctionne pas pour la rétrogradation d'une version préliminaire à une autre version préliminaire - elle ne fonctionne que pour la rétrogradation vers une version finale"

James Roland
la source
13
Cela devrait maintenant être la réponse acceptée car c'est la meilleure solution avec un minimum d'effort.
Peter
Oui, fonctionne comme un charme, y compris la rétrogradation de toutes les dépendances - parfait
peter
7
Malheureusement, cette approche ne fonctionne pas pour la rétrogradation d'une version préliminaire à une autre version préliminaire - elle ne fonctionne que pour la rétrogradation vers une version finale.
crimbo
@James Roland ce serait génial si vous pouviez mettre en évidence l'avertissement de pré-version par crimbo sur la réponse
eglasius
51

J'ai beaucoup utilisé la réponse de Xavier. Je veux ajouter que restreindre la version du package à une plage spécifiée est facile et utile dans les dernières versions de NuGet.

Par exemple, si vous ne souhaitez jamais Newtonsoft.Jsonêtre mis à jour la version antérieure 3.x.xde votre projet, changez l' packageélément correspondant dans votre packages.configfichier pour qu'il ressemble à ceci:

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

Remarquez l' allowedVersionsattribut. Cela limitera la version de ce package aux versions comprises entre 3.0( inclus ) et 4.0( exclusif ). Ensuite, lorsque vous effectuez une Update-Packagesolution globale, vous n'avez pas à vous soucier de la mise à jour de la version précédente de ce package particulier 3.x.x.

La documentation de cette fonctionnalité est ici .

ken
la source
4
Très utile pour empêcher les mises à jour NuGet de casser votre solution! (Microsoft.Net.Http v2.1.10, je vous regarde ...)
Douglas Barbin
6
Je regarde JQuery 1.9 & 2.0.
Martin Brown
Microsoft.Owin pour moi :-)
bikeman868
19

Maintenant, c'est très simplifié dans Visual Studio 2015 + et suivants. Vous pouvez le faire Downgrade / Upgradedans l'interface utilisateur elle-même, sans exécuter de commandes dans la console du gestionnaire de packages.

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

  2. Regardez l'image ci-dessous.

    • Select your Package and Choose the Version, que vous vouliez installer.

Fenêtre Nuget Package Manager du projet

Très très simple, n'est-ce pas? :) J'espère que cela t'aides...

RajeshKdev
la source
1
oui! C'est la voie à suivre :)
Syndrome d'imposteur
0

Une autre option plus manuelle pour l'obtenir:

.nuget\nuget.exe install Newtonsoft.Json -Version 4.0.5
knocte
la source