Supprimer les références inutilisées (! = "Using")


100

Comment trouver et supprimer les références inutilisées dans mes projets?

Je sais que vous pouvez facilement supprimer les instructions using dans vs 2008, mais cela ne supprime pas la référence réelle dans vos projets. La dll référencée sera toujours copiée dans votre package bin / setup.


Merci. Malheureusement, pas de réponse que je cherchais ...
Boris Callens

Réponses:


55

* Remarque: voir http://www.jetbrains.net/devnet/message/5244658 pour une autre version de cette réponse.

En lisant les articles, il semble y avoir une certaine confusion quant à la question d'origine. Laisse-moi essayer.

La publication d'origine pose vraiment la question: «Comment identifier et supprimer des références d'un projet Visual Studio à d'autres projets / assemblys qui ne sont pas utilisés?» L'affiche souhaite que les assemblys n'apparaissent plus dans le cadre de la sortie de génération.

Dans ce cas, ReSharper peut vous aider à les identifier , mais vous devez les supprimer vous-même.

Pour ce faire, ouvrez les références dans le navigateur de solutions, cliquez avec le bouton droit de la souris sur chaque assembly référencé et choisissez «Rechercher le code dépendant». Voir:

http://www.jetbrains.com/resharper/features/navigation_search.html#Find_ReferencedDependent_Code

Vous obtiendrez soit:

  1. Une liste des dépendances sur cette référence dans une fenêtre de navigateur, ou

  2. Une boîte de dialogue vous indiquant "Le code dépendant du module XXXXXXX est introuvable.".

Si vous obtenez le deuxième résultat, vous pouvez alors cliquer avec le bouton droit de la souris sur la référence, sélectionner Supprimer et la supprimer de votre projet.

Bien que vous deviez le faire «manuellement», c'est-à-dire une référence à la fois, le travail sera accompli. Si quelqu'un a automatisé cela d'une manière ou d'une autre, j'aimerais savoir comment cela a été fait.

Vous pouvez à peu près ignorer ceux du .Net Framework car ils ne sont normalement pas copiés dans votre sortie de construction (généralement - mais pas nécessairement vrai pour les applications Silverlight).

Certains articles semblent répondre à la question: "Comment supprimer les clauses using (C #) d'un fichier de code source qui ne sont pas nécessaires pour résoudre les références dans ce fichier".

Dans ce cas, ReSharper aide de plusieurs manières:

  1. Identifie les clauses d'utilisation inutilisées pour vous lors de la détection d'erreur à la volée. Ils apparaissent sous forme d'avertissements d'inspection de code - le code apparaîtra grisé (par défaut) dans le fichier et ReSharper fournira un indice pour le supprimer:

    http://www.jetbrains.com/resharper/features/code_analysis.html#On-the-fly_Error_Detection

  2. Vous permet de les supprimer automatiquement dans le cadre du processus de nettoyage de code:

    http://www.jetbrains.com/resharper/features/code_formatting.html#Optimizing_Namespace_Import_Directives

Enfin, sachez que ReSharper effectue une analyse de code statique sur votre solution. Ainsi, si vous avez une référence dynamique à l'assembly - par exemple par réflexion ou par un assembly chargé dynamiquement au moment de l'exécution et accessible via une interface - il ne la récupérera pas. Il n'y a pas de substitut pour comprendre votre base de code et les dépendances du projet lorsque vous travaillez sur votre projet. Je trouve les fonctionnalités de ReSharper très utiles.


Belle réponse détaillée. Ce qui est étrange, c'est que même si vous savez que je ne fais pas référence aux instructions d'utilisation (ce nettoyage est standard dans VS, ne comprenez pas pourquoi R # a réinventé cela), vous répondez d'abord à cette question. Pourriez-vous changer les deux?
Boris Callens

Ça ira. La fonctionnalité de ReSharper précède l'implémentation de Visual Studio. Il reste tel qu'il est réalisé grâce à leur fonction de «correction automatique» - les balises actives sont désactivées lorsque vous avez ReSharper.
jlo

1
Maintenant ~ 4 ans plus tard, ReSharper 6.1 a obtenu la fonctionnalité directement!
Julien Roncaglia

Je ne sais pas ce que vous voulez dire - ReSharper a cette fonctionnalité depuis des années.
jlo

8
ATTENTION: si vous utilisez n'importe quel type de réflexion pour charger dynamiquement à partir d'assemblys, ce sera une mauvaise chose à faire. Vous aurez utilisé la «référence» pour transporter l'assemblage avec vous au bac / site de production, mais il n'y aura pas de code le référençant directement. UTILISEZ AVEC SOIN!
Casper Leon Nielsen



5

Essayez celui-ci: Assistant de référence

Résumé

L'Assistant de référence permet de supprimer les références inutilisées des projets C #, F #, VB.NET ou VC ++ / CLI dans Visual Studio 2010.


1
peut-être connaissez-vous une extension similaire pour vs 2012?
isxaker

@isxaker Ceci est maintenant une fonctionnalité intégrée de
resharper

4

ReSharper 6.1 inclura ces fonctionnalités:

  • Optimiser les références : analysez vos références d'assemblage et leurs utilisations dans le code, obtenez la liste des références redondantes et supprimez-les.

  • Supprimer les références inutilisées : refactoring rapide pour supprimer les références d'assemblage redondantes.

  • Suppression sûre sur les références d'assemblage : supprimera les références d'assemblage si toutes sont redondantes, sinon annule les utilisations et ne peut supprimer que les références d'assemblage redondantes de la liste sélectionnée.


4

ReSharper le fera pour vous (et bien plus encore!)


Resharper supprimera-t-il réellement la référence à la DLL dans le dossier Références? Je ne pense pas que ça fasse ça?
tobinharris

1
Je ne pense pas que ce sera le cas ... Je pense que cela supprime simplement l'instruction using pour un espace de noms auquel vous ne faites pas référence. FWIW - Coderush offre la même fonctionnalité "et bien plus encore!" :)
Samurai Ken

1
Maintenant ~ 4 ans plus tard, ReSharper 6.1 a obtenu la fonctionnalité!
Julien Roncaglia

3

Je l'ai fait sans extension dans VS 2010 Ultimate Architecture-> Generate Dependency Graph-> By Assembly, il montre les assemblages utilisés et les références inutilisées supprimées manuellement.


Je ne le recommande pas pour un projet plus vaste. J'ai trouvé très difficile de discerner ce qui était et ce qui n'était pas utilisé. Cependant, je suis également daltonien, ce qui a probablement affecté l'utilité de cela pour moi.
DubiousPusher

2

J'ai une réponse gratuite qui fonctionne dans n'importe quelle version de Visual Studio et n'importe quelle version de Framework. Il ne supprime pas les références inutilisées, mais les identifie.

Vous pouvez utiliser Telerik JustDecompile sur la DLL de votre projet. Ouvrez simplement la dll dans JustDecompile et allez sous Referencespour voir ce qui est réellement utilisé dans la dll compilée.

entrez la description de l'image ici


1
Je pense que c'est une excellente solution! Écrivez-vous des plugins VS? :) ILSpy a un plugin, et je vais voir s'il peut être facilement semi-automatisé d'une manière ou d'une autre ...
Steven Coco

@StevenCoco Je ne l'ai pas fait depuis longtemps, mais l'API IDE est assez simple avec beaucoup de bons exemples sur Internet. Bonne chance et mettez-nous à jour avec votre projet si vous le faites!
toddmo

0

Étant donné que VisualStudio (ou est-ce msbuild?) Détecte les références inutilisées et ne les inclut pas dans le fichier de sortie, vous pouvez écrire un script qui analyse les références hors du csproj et les compare avec les assemblys référencés détectés par réflexion sur le résultat du projet.

Si vous êtes motivé ...


1
Ce n'est pas toujours correct. Par exemple, si vous avez la classe Foo qui dérive de Bar, et que vous avez le membre statique Blah in Bar, et que vous l'appelez Foo.Blah, alors vous devez avoir l'assembly de Foo dans les références pour le compilateur, mais il ne sera pas émis en sortie, car le membre statique est dans Bar. Il y a d'autres cas comme celui-ci.
Ilya Ryzhenkov le

Ouais, j'avais remarqué des «trous» dans mon scénario, je n'avais jamais compris pourquoi. Merci pour l'info.
Benjol

0

Je pense que sont copiés dans le bac \, car dans le projet qui a supprimé la référence, il y a une référence à un autre projet qui a la même référence ...


0

Si vous savez quelles références ne sont pas utilisées, vous pouvez les supprimer manuellement.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la référence dans le nœud Références , puis cliquez sur Supprimer.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.