Comment supprimer les packages NuGet qui ne sont référencés par aucun projet dans ma solution?

141

Pendant la mise à niveau vers VS2012 et .NET 4.5, j'ai réussi à confondre NuGet. Il existe des packages qui apparaissent dans le gestionnaire de packages (et dans le dossier packages) que je ne peux pas supprimer (je pense qu'il s'agit de packages ASP.NET NuGet hérités qui ont été remplacés par de nouveaux noms de packages par la nouvelle version. Ils n'ont chacun qu'un bouton Gérer - mais pas de bouton de désinstallation. Et quand vous regardez pour voir où ils sont utilisés, vous pouvez voir qu'ils ne sont référencés par aucun des projets de la solution? Ils n'affichent PAS de désinstallation?

Howard Pinsley
la source

Réponses:

108

Vous pouvez utiliser la console du gestionnaire de packages avec la commande: Uninstall-Package PackageIdpour le supprimer, ou simplement supprimer le dossier du package du dossier 'packages' sous le dossier solution. Vous trouverez plus d'informations sur la console du gestionnaire de packages ici: http://docs.nuget.org/docs/reference/package-manager-console-powershell-reference

Pavel Bakshy
la source
8
Merci Pavel. J'avais le sentiment que vous pouviez simplement supprimer les dossiers. C'est un peu déconcertant car je dois m'assurer manuellement qu'aucun des packages n'est référencé (ils ne semblent pas l'être). Je suis toujours un peu curieux de savoir pourquoi le gestionnaire de packages n'affiche pas de bouton Désinstaller (ou supprimer).
Howard Pinsley
2
Le gestionnaire de packages au niveau de la solution affiche toutes les références de packages aux projets de la solution et tous les packages supplémentaires placés dans le dossier packages, mais non référencés. Pour ces packages, aucune capacité de désinstallation dans l'interface utilisateur. Je suis d'accord que c'est le résultat d'un comportement incorrect, mais dans ce cas, vous devriez le vérifier manuellement. Et supprimez le package ou réinstallez-le lorsque vous en aurez besoin ou non.
Pavel Bakshy
1
En supprimant simplement le dossier et en retournant à NuGet et en voyant le package, il s'affiche toujours comme installé avec la coche verte à côté, il est préférable de procéder à la désinstallation appropriée à l'aide de la console.
k80sg
1
@ysrb, c'est une commande powershell qui va verbe-nom tel que get-user ou remove-item, votre exemple est nom-verbe
Nick Young
1
@ysrb Comme le dit Nick Young, et en plus, ce serait un compliment horrible à Install-Package.
ProfK
159

J'ai trouvé une solution de contournement pour cela.

  1. Activer la restauration des packages et la vérification automatique (Options / Gestionnaire de packages / Général)
  2. Supprimez tout le contenu du dossier des packages (dans la corbeille si vous êtes nerveux!)
  3. Gérer les packages Nuget pour la solution
  4. Cliquez sur le bouton de restauration.

NuGet restaurera uniquement les packages utilisés dans votre solution. Vous vous retrouvez avec un bel ensemble de packages simplifié.

James L
la source
1
Est-ce que cela ne supprimera pas le package packages.configet ne supprimera pas les références du projet?
CodeCaster
1
@CodeCaster difficile d'analyser votre double négatif. Rien ne sera supprimé de la configuration et des références. L'idée ici est de supprimer les packages NuGet qui ne sont plus référencés
James L
1
Excellente réponse! Si vous utilisez TFS, vous devez d'abord supprimer tout le contenu à l'intérieur de ./packages dans l'explorateur source COUNTROL afin que d'autres clients comme les machines de construction suppriment également les éléments redondants.
Alexander Schmidt le
4
@ sprinter252, si vous utilisez la restauration de packages, vous n'êtes pas censé archiver les packages dans le contrôle de code source en premier lieu. C'est l'un des principaux avantages de l'utilisation de la restauration de paquets. Dans le cadre de la conversion en restauration de package, une règle «ignorer» doit être placée dans le dossier packages.
Carl Bussema
@CarlBussema Vous avez raison. Depuis la nouvelle version de NuGet, ce n'est pas si important car Nuget n'ajoutera aucun binaire dans les sous-dossiers. Vous n'obtenez donc que la structure des dossiers. Mon commentaire était lié au comportement par défaut de TFS (dossier packages inclus). Sur TFS Anywhere, les ignorés sont souvent ignorés ;-). Important pour les projets mixtes avec Xamarin.
Alexander Schmidt
17

Ouvrez d'abord la console du gestionnaire de packages. Sélectionnez ensuite votre projet dans la liste déroulante. Et exécutez les commandes suivantes pour désinstaller les packages nuget.

Get-Package

pour obtenir tous les packages que vous avez installés.

puis

Uninstall-Package PagedList.Mvc

--- pour désinstaller un package nommé PagedList.MVC

Message

PM> Uninstall-Package PagedList.Mvc
Successfully removed 'PagedList.Mvc 4.5.0.0' from MCEMRBPP.PIR.
Abdus Salam Azad
la source
Cette réponse a parfaitement fonctionné pour moi. Ma situation était que le package n'apparaissait que sous l'onglet Mises à jour de la boîte de dialogue ... et lorsque j'ai appuyé sur Mettre à jour, aucun projet n'avait installé le package - il n'y avait donc aucun moyen de le mettre à jour ou de le supprimer.
azarc3
8

Si vous souhaitez supprimer / désinstaller le package Nuget qui est appliqué à plusieurs projets dans vos solutions, accédez à:

  1. Outils-> Gestionnaire de packages Nuget -> Gérer les packages Nuget pour la solution

  2. Dans la colonne de gauche où se trouve «Paquets installés», sélectionnez «Tous», de sorte que vous verrez une liste des paquets installés et le bouton Gérer sur eux.

  3. Sélectionnez le bouton Gérer et vous obtiendrez une fenêtre contextuelle, décochez la case à côté du nom du projet et OK

Le reste du travail de Package Manager le fera pour vous.


la source
1
C'est définitivement la réponse que je cherchais, merci!
Sal
3

Si vous avez supprimé le package à l'aide de l' utilitaire Uninstall-Package et supprimé le package souhaité du répertoire du package sous solution (et que vous obtenez toujours une erreur), ouvrez simplement le fichier * .csproj dans l'éditeur de code et supprimez la balise manuellement. Comme par exemple, je voulais me débarrasser du package Nuget Xamarin.Forms.Alias et j'ai supprimé ces lignes du fichier * .csproj.

Suppression du package nuget du script msbuild

Et enfin, n'oubliez pas de recharger votre projet une fois que vous y êtes invité dans Visual Studio (après avoir changé le fichier de projet). Je l'ai essayé sur Visual Studio 2015, mais cela devrait également fonctionner sur Visual Studio 2010 et les versions ultérieures.

J'espère que cela t'aides.

UN B
la source
2

Une alternative consiste à installer le package inutilisé que vous souhaitez supprimer dans n'importe quel projet de votre solution, après cela, désinstallez-le et Nuget le supprimera également.

Un programme de désinstallation approprié est nécessaire ici.

D.Rosado
la source
Existe-t-il un moyen de le désinstaller correctement sans le réinstaller?
Knox
2

Solution 1

Utilisez le pipeline PowerShell pour obtenir des packages et les supprimer en une seule instruction comme celle-ci

Get-Package | Uninstall-Package

Solution 2

si vous souhaitez désinstaller les packages sélectionnés, procédez comme suit

  1. Utilisez GetPackagespour obtenir la liste des packages
  2. Télécharger le logiciel Nimble Text
  3. Copiez la sortie de GetPackages dans NimbleText (pour chaque ligne de la fenêtre de liste)
  4. Réglez Column Seperator sur (si nécessaire
  5. Type Uninstall-Package $0(Remplacer à l'aide de la fenêtre de modèle)
  6. Copiez les résultats et collez-les dans Package Manage Console

Ce sont tous les gens.

irfandar
la source
1

Un package NuGet peut référencer un autre package NuGet. Donc, soyez très prudent avec les dépendances inter-packages. Je viens de désinstaller un package de carte Google et il a ensuite désinstallé les packages sous-jacents tels que Newtonsoft, Entity Framework, etc.

Ainsi, supprimer manuellement un package particulier du dossier packages serait plus sûr.

Aki
la source
1

Dans la fenêtre de la console du gestionnaire de packages, la commande que vous avez utilisée pour installer un package peut souvent être utilisée pour désinstaller ce package. Remplacez simplement la commande INSTALL par UNINSTALL .

Par exemple, pour installer PowerTCPTelnet, la commande est:

Install-Package PowerTCPTelnet -Version 4.4.9

Pour le désinstaller, la commande est:

Uninstall-Package PowerTCPTelnet -Version 4.4.9

Jazimov
la source
1

VS2019> Outils> Options> Nuget Package Manager> Général> Cliquez sur "Effacer tous les cache (s) Nuger"

Harris
la source
-2

Une autre façon, et très simplement pour moi, est:

  1. Accédez à votre Soution puis faites un clic droit dessus.

  2. Sélectionnez l'option "Managed NUgets Packages for Solution". Cela ouvre une fenêtre Popup, dans ce clic sur le bouton "Paramètres". Cela ouvrira une autre fenêtre contextuelle, puis recherchera: "Package Manager".

  3. Dans l'option "Package Manager", vous avez deux autres options (I. Général II. Sources des packages) Dans chaque option, décochez toutes les cases.

Cette étape désactive NuGet de votre projet.

J'espère vraiment vous aider.

amedriveroperez
la source
-2

Si vous souhaitez utiliser l'option Visual Studio, veuillez consulter le lien ci-dessous

http://spvenky.wordpress.com/2014/08/10/how-to-remove-nuget-packages-from-existing-visual-studio-solution/

Étape 1: Dans Visual Studio, accédez à Tools / NuGet Package Manager / Manage NuGet Packages for Solution…

Étape 2: désélectionnez vos projets de la solution actuelle

Étape 3: désélectionnez le (s) projet (s) et appuyez sur OK

user1214835
la source
2
Il est préférable d'écrire la réponse dans StackOverflow plutôt que de simplement publier un lien vers celui-ci, car les liens peuvent expirer dans le futur.
Amadeus Sánchez