Suppression de toutes les références inutilisées d'un projet dans les projets Visual Studio

263

Je me demandais simplement s'il était possible dans différentes versions de Visual Studio de supprimer automatiquement toutes les références d'un projet qui n'ont jamais été utilisées?

Dans votre réponse, veuillez spécifier à quelle version de VS la solution s'applique.

KroaX
la source
4
En général, je me demande si la suppression de ces DLL entraîne une amélioration observable du temps de génération ou autre chose? (Bien sûr, à part la suppression des dépendances redondantes)
monish001
3
Existe-t-il une extension gratuite similaire pour VS2015?
George Birbilis
1
Projet VB.Net ont depuis VS 2005, mais il n'a jamais été mis en œuvre pour les projets C # msdn.microsoft.com/en-us/library/7sfxafba
Slai
4
Vous pouvez voter pour que cette fonctionnalité soit incluse dans VS (comme il se doit).
Mike Lowery
2
@ monish001 - chaque assemblage et ressource augmente l'empreinte de déploiement et est une autre chose à gérer / maintenir ou à être une source potentielle de bogues.
StingyJack

Réponses:

55

Si Resharper (plugin) est installé, vous pouvez accéder à une fonctionnalité qui vous permet d'analyser les références utilisées via l' Explorateur de solutions> (clic droit) Références> Optimiser les références ...

http://www.jetbrains.com/resharper/webhelp/Refactorings__Remove_Unused_References.html

Cette fonctionnalité ne gère pas correctement:

  • Assemblages à injection de dépendance
  • Assemblages chargés dynamiquement (Assembly.LoadFile)
  • Assemblages de code natifs chargés via l'interopérabilité
  • Contrôles ActiveX (COM interop)
  • Autres façons créatives de charger des assemblages

entrez la description de l'image ici

Ernest
la source
1
Votre dernière déclaration "Cependant, ce n'est pas parfait, tous les assemblys qui dépendent des assemblys référencés dans votre projet actuel sont toujours marqués comme inutilisés." n'est en fait pas un problème. Le build sait copier les références de vos références. Voir cette réponse: stackoverflow.com/a/2290139/26262
Ed Greaves
Bien que ce soit un moyen viable de le faire, "pour moi dans différentes versions de Visual Studio" ne signifie pas autre chose mais déjà "dans"
Mark Schultheiss
28

L' extension Resharper le fera pour vous.

Cette extension prend en charge Visual Studio 2005 à 2017.

Bien que le compilateur n'inclue pas d'assemblages inutilisés, l'utilisation d'instructions et de références étrangères ralentit Visual Studio et Intellisense, car il y a plus de code que les outils doivent prendre en compte.

Mathieson
la source
12
que l'on a trouvé beaucoup de références inutilisées dans notre projet - mais un tas d'entre elles étaient vraiment utilisées ... Donc je ne fais pas confiance à Resharper avec des références
Offler
5
Resharper consomme des tonnes de mémoire dans les grands projets quand il y a beaucoup de références qui finissent par planter VS
Cemre
2
Les éditions @eraj VS Express ne prennent pas en charge les extensions, obtenez l'édition communautaire gratuite, qui prend en charge des extensions telles que ReSharper.
codemonkeh
4
Pete, tout outil automatisé aura la possibilité de dépasser. Surtout à l'ère des dépendances DI et PCL qui semblent être inutilisées peuvent être nécessaires, mais ce n'est guère la faute de l'outil. Plutôt que de faire une capture d'écran, vous devriez utiliser un logiciel de contrôle de version. Un système moderne comme Git ou Hg vous permettra de vous enregistrer fréquemment localement afin de ne jamais perdre de travail.
Mathieson
2
pour autant que je sache, Resharper montre des espaces de noms inutilisés, pas des références d'assemblage, ce que je pense que la question "références inutilisées d'un projet" signifie. J'aimerais aussi retrouver ce dernier
Sonic Soul
28

Vous pouvez essayer l'extension VS2010 gratuite: Assistant de référence du groupe Lardite. Cela fonctionne parfaitement pour moi. Cet outil aide à trouver les références inutilisées et vous permet de choisir les références à supprimer.

Farfelu
la source
3
Ne fonctionne pas avec le projet MVC. Il supprime les DLL essentielles en tant que .Helpers et .WebPage
User.Anonymous
3
@Amit l'extension a une version de travail pour VS2012 maintenant
Philipp M
Cela fonctionne si vous suivez une astuce simple: devio.wordpress.com/2014/12/03/…
ravi punjwani
5
et pour VS2019?
DARKGuy
21

Dans un projet Visual Basic, il est possible de supprimer les "Références inutilisées" (Projet -> Références -> Références inutilisées). En C # il n'y a pas une telle fonction.

La seule façon de le faire dans un projet C # (sans autres outils) est de supprimer les éventuels assemblages inutilisés, de compiler le projet et de vérifier si des erreurs se produisent lors de la compilation. Si aucune erreur ne se produit, vous avez supprimé un assemblage inutilisé. ( Voir mon post )

Si vous voulez savoir quel projet (assemblage) dépend d'autres assemblages, vous pouvez utiliser NDepend .

Jehof
la source
2
Dans VS 2008/2010, il existe une option de menu contextuel pour supprimer ou supprimer et trier les utilisations.
JohnB
11
@JohnB: Bien sûr, vous avez raison, mais sa question concerne les références (aux assemblages) et non les utilisations (des espaces de noms).
Jehof
VS2012: menu: Projet-> propriétés-> Références-> Références inutilisées.
LosManos
20

Pour Visual Studio 2013/2015/2017, il existe une extension qui fait exactement ce que vous voulez: ResolveUR . Ce que cela fait essentiellement, c'est:

  • la référence est supprimée dans le projet
  • le projet est compilé avec msbuild
  • vérifier les erreurs de construction
  • restaurer les références supprimées s'il y avait des erreurs de construction.
Claudiu Constantin
la source
vient de l'installer pour VS 2017 Community Edt. - fonctionne bien jusqu'à présent.
Thomas
il dit qu'il y a une erreur de construction mais il n'y a pas d'erreur de construction quand je construis donc ça ne fonctionne pas vs2015 comm edtion
Raghavendra
Vous pouvez créer un problème sur la page du github: github.com/subatta/ResolveUR/issues
Claudiu Constantin
5
2,5 étoiles sur 5 sur Visual Studio Marketplace à partir de 52 avis m'a un peu rebuté
ECH
Je l'ai essayé sur un projet MVC et il propose de supprimer plusieurs dépendances vitales comme System.Web.Helpers, donc je suis réticent à le laisser aller de lui-même.
Jahaziel
19

Tout ce dont vous avez besoin est de la pierre et des articulations nues, vous pouvez le faire comme un homme des cavernes.

  1. Supprimer les espaces de noms inutilisés (pour chaque classe)
  2. Exécuter la version de débogage
  3. Copiez vos références d'espace de noms exécutables et restantes vers un nouvel emplacement
  4. Exécutez l'exécutable
  5. Une erreur DLL de référence manquante se produira
  6. Copiez la DLL requise du dossier de débogage
  7. Répétez 4-6
  8. Gu Gu Ga Ga?
  9. Jette ta pierre

Vous pouvez également compter sur vos outils de génération pour vous faire savoir quelle référence est encore requise. C'est l'ère de VS 2017, l'homme des cavernes a encore survécu.

Eark
la source
Haha, eh bien, rien de mal avec un peu d'humour ici. L'approche Stoneman, en effet, ressemble à une édition Enterprise coûteuse, c'est ce que nous avons en ce moment.
Nicholas Petersen
16

Pour toute personne venant ici à la recherche de Visual studio 2012 :

Téléchargez et installez l' assistant de référence pour Visual Studio 11

Plus tard, vous pouvez faire:

entrez la description de l'image ici

Habib
la source
1
L'assistant de référence pour Visual Studio 11 semble être inexact, il m'a montré un tas de références inutilisées que je savais réellement utilisées (installées via Nuget).
Bill Yang,
1
Ne fonctionne pas avec le projet MVC. Il supprime les DLL essentielles en tant que .Helpers et .WebPage
User.Anonymous
Oui, cela est revenu me mordre dans le cul en utilisant un programme WPF C #.
Charles Clayton
Pas d'option dans VS2017
Nathan
1
N'existe pas non plus dans VS2019
Vin Shahrdar
15

Avec les versions de Visual Studio 2017 et 2015, vous pouvez le faire avec la fonctionnalité Code Map , mais cette fonctionnalité est uniquement disponible dans l' édition Enterprise , pas le communauté ou Professional versions .

Cliquez avec le bouton droit sur le nœud du projet dans l'explorateur de solutions et sélectionnez «Afficher sur la carte de code». Cela affichera votre .dll comme un nœud unique dans un graphique vierge. Cliquez avec le bouton droit sur ce nœud dans la mappe de code et sélectionnez «Afficher les assemblages de ces références». Cela ajoutera un nœud supplémentaire appelé "Externals" qui peut être développé pour afficher uniquement les assemblys qui sont réellement référencés.

entrez la description de l'image ici

Glenn Slayden
la source
1
Si vous disposez de l'édition Entreprise et que vous ne voyez pas cette option dans le menu contextuel, vous devez installer la fonctionnalité "Code Map" à partir du programme d'installation VS sous le panneau Composants individuels.
StingyJack
C'est une bonne idée, merci @Glenn. Je veux juste dire que j'ai utilisé Micosoft.Office.Interop.Excel et qu'il n'était pas répertorié parmi les autres références, il faut donc encore être un peu prudent.
Emil Filip
14

Dans Visual Studio 2013, cette extension fonctionne: ResolveUR

Défaillance générale
la source
15
@abarisone Votre réponse générique «n'utilisez pas de lien comme réponse» ne devrait vraiment être utilisée qu'après avoir réellement regardé la réponse. Le lien est la seule chose qui est pertinente pour cette réponse. C'est un lien vers un plugin VS, il n'y a donc rien d'autre à inclure.
Charles Boyung
Je suis d'accord avec Charles. Cela semble être un abus de modération de @abarisone. Cette réponse m'a vraiment aidé à gagner du temps et j'aurais détesté si des mods abusaient de leurs pouvoirs pour la supprimer.
Zun
@Zun Tout d'abord, je n'ai jamais été modérateur du tout, ni prétendu l'être. Mon intention était de demander plus d'informations sur l'extension. C'était peut-être superficiel à mes côtés, mais je n'avais certainement pas l'intention de commettre un abus.
abarisone
12

Certaines personnes ont suggéré d'utiliser un outil génial - Assistant de référence pour Visual Studio . Le problème est que VS2012 est le dernier Visual Studio pris en charge. Mais il y a aussi le moyen de le faire fonctionner dans VS2013;)

Et voici comment:

1) Téléchargez Lardite.RefAssistant.11.0.vsix

2) Modifiez l'extension en zip: Lardite.RefAssistant.11.0.vsix->Lardite.RefAssistant.11.0.zip

3) Décompressez et ouvrez le extension.vsixmanifestfichier dans l'éditeur de texte

4) Trouvez toutes les occurrences de InstallationTarget Version="[11.0,12.0)"et remplacez-les parInstallationTarget Version="[11.0,12.0]" (notez le crochet de fermeture)

5) Enregistrez le fichier et zippez tous les fichiers pour qu'ils soient au niveau du zip racine

6) Modifiez l'extension du nouveau zipenvsix

7) Installez et profitez :)

Je l'ai testé avec VS2013, merci la source pour le tutoriel

EDIT Ajouter au support VS 2015 Community Edition

<InstallationTarget Version="[14.0,15.0]" Id="Microsoft.VisualStudio.Community" />

Signification des parenthèses

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.
VladL
la source
1
Cela fonctionne très bien! On dirait alors une simple faute de frappe qui aurait pu être corrigée il y a des années par l'auteur - mais il semble avoir disparu, du moins le site a ...
wexman
Ce n'est pas une faute de frappe, mais la version VS la plus élevée prise en charge :). Le développeur est censé tester son module complémentaire avec chaque nouvelle version de VS et incrémenter le nombre, mais pour une raison quelconque, il ne l'a pas fait.
VladL
N'oubliez pas d'arrêter le "copier-coller". :)
Rikki
@RikkiRockett Vous vous adressez à moi? J'ai lié la source dans ma réponse. Ou que voulez-vous dire exactement?
VladL
2
Non mec. Je rigolais. Je dis juste au mec qui a mis ")" au lieu de "]" qui nous a tous fait suivre vos instructions. :) Beau travail cependant, juste fait ce que vous avez dit et tout va bien! Vous venez de me sauver une journée de lutte avec ça. (y)
Rikki
7

Vous pouvez utiliser l' extension Reference Assistant à partir de la galerie d'extensions Visual Studio.

Utilisé et fonctionne pour Visual Studio 2010.

eka808
la source
2
Vous devez être prudent avec les projets Web. Il signale les DLL utilisées comme "inutilisées".
Miro J.
Je suis d'accord avec Miro. J'ai essayé de l'utiliser avec mon projet Web et il a sélectionné deux douzaines de références nécessaires pour exécuter mon application Web (System.Web. *, Ninject. *, EntityFramework, pour n'en nommer que quelques-unes).
Denis M. Kitchen
Ne fonctionne pas avec le projet MVC. Il supprime les DLL essentielles comme .Helpers et .WebPage
User.Anonymous
1

En utilisant DevExpress, je suis ces instructions:

  1. Dans VS, accédez à DevExpress - Editor - Code Cleanup. Sous Règles, cochez «Supprimer les références d'espace de noms inutilisées». Cliquez sur OK.
  2. Cliquez avec le bouton droit sur la solution et choisissez «Nettoyage de code». Le nettoyage s'exécute pendant quelques minutes et se termine.
  3. Créez votre application
Solutions IndieTech
la source
-3

La méthode suivante ne dépend d'aucun module complémentaire et n'est pas très douloureuse.

Parcourez chacun de vos fichiers source et

  1. Tout sélectionner (Ctrl-A)
  2. Basculer l'expansion du contour (Ctrl-M, M). Cela réduira le fichier à deux lignes.
  3. Cliquez sur le «+» de l'espace de noms. Cela affichera chacune des classes du fichier sur une seule ligne. Analysez le nombre de références de chaque classe, à la recherche de classes non référencées.
  4. Cliquez sur chacune des classes '' + '. Cela montrera chacune des fonctions de classe sur une seule ligne. Analysez le nombre de références de chaque fonction, à la recherche de fonctions non référencées.

L'analyse de chaque fichier à la recherche de «référence 0» ne prend qu'une seconde.

La numérisation d'un projet entier ne prend que quelques minutes.

NoBrassRing
la source
-11

Dans VB2008, cela fonctionne de cette façon:

Project>Add References

Cliquez ensuite sur l'onglet Récent où vous pouvez voir la liste des références utilisées récemment. Localisez celui que vous ne voulez pas et supprimez-le. Ensuite, vous fermez sans rien ajouter.

codelearner
la source
1
Cela ne vérifie pas si la référence est utilisée
Xavier Poinas
-12

Pour supprimer une référence dans Visual C # Dans l'Explorateur de solutions, ouvrez le nœud Références sous le nœud de projet. Cliquez avec le bouton droit sur une référence et cliquez sur Supprimer.

Halit Can
la source
3
Cela ne semble pas être limité à une utilisation inutilisée ou automatique.
Nathan Tuggy
ce n'est pas un fonctionnement automatique.
Amir
bien essayé, mais mauvaise réponse, pas automatique comme dit précédemment