Comment trouver les packages NuGet inutilisés dans une solution?

148

Comment trouver les packages NuGet inutilisés dans une solution?

J'ai un certain nombre de solutions où il y a beaucoup de packages installés, et un grand nombre sont signalés comme ayant des mises à jour.

Cependant, je crains qu'il y ait des changements cassants, donc je veux d'abord nettoyer en supprimant tous les paquets inutilisés.

SteveC
la source
2
Vous vous rendez compte que les changements de rupture dans les packages que vous n'utilisez pas ne vous affecteraient pas de toute façon ... En ce qui concerne la question, je supprime simplement tous les packages NuGet et rajoute ce que le compilateur me dit.
Ohad Schneider
5
@OhadSchneider Non ... mais le TOC en moi ne veut pas de toute la cruauté des paquets inutilisés, par exemple dans le déploiement
SteveC

Réponses:

57

ReSharper 2016.1 a une fonctionnalité pour supprimer NuGet inutilisé.

Il peut être exécuté sur une solution et sur chaque projet d'une solution et il effectue les opérations suivantes:

  1. Analysez votre code et collectez des références aux assemblys.
  2. Créez un graphique d'utilisation de NuGet en fonction des utilisations des assemblys.
  3. Les packages sans fichiers de contenu, inutilisés eux-mêmes et sans dépendances utilisées sont considérés comme inutilisés et il est suggéré de les supprimer.

Malheureusement, cela ne fonctionne pas pour les project.jsonprojets ( RSRP-454515 ) et les projets de base ASP.NET ( RSRP-459076 )

ulex
la source
2
J'ai 2016.1 et R # ne supprime pas les références de nuget inutilisées. J'utilise project.json avec nuget3 - est-ce un problème connu?
Peter McEvoy
2
@PeterMcEvoy Oui, c'est un problème connu. Merci de l'avoir signalé. J'ai mis à jour la réponse pour clarifier cela.
ulex
4
Je dois être aveugle mais je ne vois aucun moyen d'exécuter cet outil
claudekennilol
14
@claudekennilol vient de le comprendre. faites un clic droit sur le projet et il y a une option pour "Optimiser les références ..."
Matt Sanders
1
@Fractal Correct. C'est très (trop) cher pour les utilisateurs privés, mais si vous êtes dans n'importe quel type de lieu de travail, Resharper en vaut la peine pour le flux de travail beaucoup plus rapide et plus propre que vous obtenez, par rapport au VS par défaut.
Excludos
21

Vous pouvez utiliser l'extension Visual Studio ResolveUR - Résoudre les références inutilisées

Résolvez les références inutilisées, y compris les références de nuget dans les projets Visual Studio 2012/2013 via l'élément de menu au niveau des nœuds de solution et de projet Fenêtre de l'outil Explorateur de solutions.

Ce n'est pas une tâche facile, donc je suggère de faire une sauvegarde et / ou de valider avant juste pour revenir en arrière si quelque chose ne va pas.

dknaack
la source
Ce programme est trop pressé lorsqu'il s'agit de supprimer des bibliothèques ... Attention, lorsque vous utilisez un site Web, vous remarquerez que beaucoup de DLL sont nécessaires mais ont disparu. Si un package NuGet en nécessite un autre, vous ne devez pas supprimer celui-ci même si VOUS n'en avez pas de dépendance absolue.
jsgoupil
J'ai utilisé cet outil avec de mauvais résultats. Il a supprimé (ou du moins suggéré de supprimer) beaucoup de choses qui étaient réellement utilisées. Il y a eu quelques fois où j'ai fait confiance aux suggestions et j'ai dû passer un temps précieux à essayer de récupérer ce qu'il avait supprimé.
Ryan VandenHeuvel
2
[NOTE] LA description indique clairement:The tool is not tested to work with DotNet Web projects(Asp.Net, MVC), Windows CE, Silverlight project types. Use it at your own risk.
Korayem
Cet outil est vraiment sympa! Il est assez intelligent pour ne pas supprimer NUnit.ConsoleRunner, etc. même si vous n'y avez pas de référence directe dans votre code
OlegI
Cet outil est lent. J'ai une solution avec plus de 250 projets .. j'ai attendu .. et attendu .. soupir
Piotr Kula
11

Vous pouvez accomplir cela en utilisant Resharper 2019.1.1.

Faites un clic droit sur le projet> Refactoriser> Supprimer les références inutilisées.

Si votre projet est petit, vous pouvez également projeter> Optimiser les références utilisées. . .

Une fenêtre apparaîtra. Sélectionnez toutes les références et supprimez-les toutes. Revenez ensuite en arrière et ajoutez à nouveau ceux qui vous donnent une erreur de compilation.

Nick Gallimore
la source
3
Dans VS.Net 2019 avec Resharper, j'ai trouvé cette option sous: Explorateur de solutions> Références > Optimiser les références ...
R. Schreurs
«La fenêtre de l'outil Optimiser les références affiche les références d'assemblage qui sont à la fois inutilisées et utilisées dans le projet en cours et montre comment les références sont utilisées exactement. blog.jetbrains.com/dotnet/2012/01/03/…
Nick Gallimore le
1

C'est du travail manuel, mais ça marche.

  1. Utilisez ReSharper ou un outil d'analyse de code similaire pour identifier les références inutilisées dans vos projets et désinstaller le nuget dans les projets correspondants.

  2. Parfois, les nugets désinstallés persistent dans les listes de packages installés et de mises à jour de la boîte de dialogue Gérer les packages NuGet. Fermez Visual Studio, supprimez le packagesdossier, puis rouvrez la solution et restaurez vos nugets.

angularsen
la source
0

Je ne pense pas qu'il existe un moyen par défaut de le découvrir. La raison principale étant la variété de choses que ces packages peuvent faire, du référencement d'un assembly à l'injection de code source dans votre projet. Vous voudrez peut-être vérifier les extensions Nuget.Extensions . Le fil suivant sur codeplex parle d'un rapport d'audit des packages nuget.

http://nuget.codeplex.com/discussions/429694

(NuGet a été déplacé de Codeplex vers GitHub. Archive du lien ci-dessus :) https://web.archive.org/web/20171212202557/http://nuget.codeplex.com:80/discussions/429694

Nikhil Gupta
la source