Nicht verwendete Referenzen entfernen (! = "Using")

100

Wie kann ich nicht verwendete Referenzen in meinen Projekten finden und löschen?

Ich weiß, dass Sie die using-Anweisungen in vs 2008 leicht entfernen können, aber dies entfernt nicht die tatsächliche Referenz in Ihren Projekten. Die referenzierte DLL wird weiterhin in Ihr bin / setup-Paket kopiert.

Boris Callens
quelle
Vielen Dank. Leider keine Antwort, nach der ich gesucht habe ...
Boris Callens
Mögliches Duplikat von Tools zum Auffinden nicht verwendeter Referenzen
David Schmitt

Antworten:

55

* Hinweis: Eine andere Version dieser Antwort finden Sie unter http://www.jetbrains.net/devnet/message/5244658 .

Beim Durchlesen der Beiträge scheint es einige Verwirrung hinsichtlich der ursprünglichen Frage zu geben. Lassen Sie mich einen Stich machen.

Der ursprüngliche Beitrag stellt wirklich die Frage: "Wie identifiziere und entferne ich Verweise von einem Visual Studio-Projekt auf andere Projekte / Assemblys, die nicht verwendet werden?" Das Poster möchte, dass die Assemblys nicht mehr als Teil der Build-Ausgabe angezeigt werden.

In diesem Fall kann ReSharper Ihnen helfen , sie zu identifizieren , aber Sie müssen sie selbst entfernen .

Öffnen Sie dazu den Verweis im Lösungsbrowser, klicken Sie mit der rechten Maustaste auf jede referenzierte Assembly und wählen Sie "Abhängigen Code suchen". Sehen:

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

Sie erhalten entweder:

  1. Eine Liste der Abhängigkeiten von dieser Referenz in einem Browserfenster oder

  2. Ein Dialogfeld mit der Meldung "Code abhängig vom Modul XXXXXXX wurde nicht gefunden."

Wenn Sie das zweite Ergebnis erhalten, können Sie mit der rechten Maustaste auf die Referenz klicken, Entfernen auswählen und aus Ihrem Projekt entfernen.

Während Sie dies "manuell" tun müssen, dh jeweils eine Referenz, wird die Arbeit erledigt. Wenn jemand dies auf irgendeine Weise automatisiert hat, bin ich daran interessiert zu hören, wie es gemacht wurde.

Sie können diejenigen im .Net Framework so gut wie ignorieren, da sie normalerweise nicht in Ihre Build-Ausgabe kopiert werden (normalerweise - obwohl dies für Silverlight-Apps nicht unbedingt der Fall ist).

Einige Beiträge scheinen die Frage zu beantworten: "Wie entferne ich mithilfe von Klauseln (C #) aus einer Quellcodedatei, die nicht zum Auflösen von Verweisen in dieser Datei erforderlich sind?"

In diesem Fall hilft ReSharper auf verschiedene Weise:

  1. Identifiziert nicht verwendete mithilfe von Klauseln für Sie während der Erkennung von Fehlern im laufenden Betrieb. Sie werden als Warnungen zur Codeinspektion angezeigt. Der Code wird in der Datei ausgegraut angezeigt (Standardeinstellung), und ReSharper gibt einen Hinweis zum Entfernen:

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

  2. Ermöglicht das automatische Entfernen im Rahmen der Codebereinigung:

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

Stellen Sie schließlich fest, dass ReSharper eine statische Code-Analyse für Ihre Lösung durchführt. Wenn Sie also einen dynamischen Verweis auf die Assembly haben - beispielsweise durch Reflektion oder eine Assembly, die zur Laufzeit dynamisch geladen wird und über eine Schnittstelle zugegriffen wird - wird diese nicht abgerufen. Es gibt keinen Ersatz dafür, Ihre Codebasis und die Projektabhängigkeiten zu verstehen, während Sie an Ihrem Projekt arbeiten. Ich finde die ReSharper-Funktionen sehr nützlich.

jlo
quelle
Schöne ausführliche Antwort. Was seltsam ist, ist, dass Sie, obwohl Sie wissen, dass ich mich nicht auf die using-Anweisungen beziehe (diese Bereinigung ist Standard in VS, verstehen Sie nicht, warum R # das neu erfunden hat), diese Frage zuerst beantworten. Würde es Ihnen etwas ausmachen, die beiden zu vertauschen?
Boris Callens
Wird besorgt. Die Funktion von ReSharper geht der Implementierung von Visual Studio voraus. Dies bleibt so, wie es durch die Funktion "Autokorrektur" erreicht wird. Die Smart Tags werden deaktiviert, wenn Sie über ReSharper verfügen.
jlo
1
Jetzt ~ 4 Jahre später hat ReSharper 6.1 die Funktion direkt erhalten!
Julien Roncaglia
Ich bin mir nicht sicher, was Sie meinen - ReSharper hat diese Funktion seit Jahren.
jlo
8
ACHTUNG: Wenn Sie eine Art von Reflexion verwenden, um Baugruppen dynamisch zu laden, ist dies eine schlechte Sache. Sie haben die "Referenz" verwendet, um die Baugruppe zum Behälter / Produktionsstandort mitzunehmen, aber es gibt keinen Code, der direkt darauf verweist. MIT PFLEGE VERWENDEN!
Casper Leon Nielsen
5

Versuchen Sie Folgendes: Referenzassistent

Zusammenfassung

Der Referenzassistent hilft beim Entfernen nicht verwendeter Referenzen aus C # -, F # -, VB.NET- oder VC ++ / CLI-Projekten in Visual Studio 2010.

Leniel Maccaferri
quelle
1
Vielleicht kennen Sie eine ähnliche Erweiterung für vs 2012?
Isxaker
@isxaker Dies ist jetzt eine eingebaute Funktion von
Resharper
4

ReSharper 6.1 enthält folgende Funktionen:

  • Referenzen optimieren : Analysieren Sie Ihre Assemblyreferenzen und ihre Verwendung im Code, rufen Sie eine Liste redundanter Referenzen ab und entfernen Sie sie.

  • Nicht verwendete Referenzen entfernen : Schnelles Refactoring zum Entfernen redundanter Assemblyreferenzen.

  • Sicheres Löschen von Baugruppenreferenzen : Löscht Baugruppenreferenzen, wenn alle redundant sind. Andernfalls werden Verwendungen verworfen und nur redundante Baugruppenreferenzen aus der ausgewählten Liste entfernt.

Kirill Skrygan
quelle
4

ReSharper erledigt dies für Sie (und vieles mehr!)

Chris Canal
quelle
Entfernt Resharper tatsächlich den Verweis auf die DLL im Ordner "Referenzen"? Ich glaube nicht, dass es das tut?
Tobinharris
1
Ich glaube nicht, dass es so sein wird ... Ich denke, es reißt nur die using-Anweisung für einen Namespace, auf den Sie nicht verweisen. FWIW - Coderush bietet die gleiche Funktionalität "und vieles mehr!" :)
Samurai Ken
1
Jetzt ~ 4 Jahre später hat ReSharper 6.1 die Funktion bekommen!
Julien Roncaglia
3

Ich habe dies ohne Erweiterung in VS 2010 Ultimate Architecture-> Abhängigkeitsdiagramm generieren-> Nach Assembly ausgeführt. Es zeigt verwendete Assemblys an und entfernte nicht verwendete Referenzen manuell.

mes
quelle
Ich empfehle dies nicht für ein größeres Projekt. Ich fand es sehr schwierig zu erkennen, was verwendet wurde und was nicht. Ich bin jedoch auch farbenblind, so dass dies wahrscheinlich die Nützlichkeit für mich beeinträchtigte.
DubiousPusher
2

Ich habe eine kostenlose Antwort, die in jeder Version von Visual Studio und jeder Framework-Version funktioniert. Die nicht verwendeten Referenzen werden nicht entfernt, aber identifiziert.

Sie können Telerik JustDecompile für Ihre Projekt-DLL verwenden. Öffnen Sie einfach die DLL in JustDecompile und gehen Sie unter, um Referenceszu sehen, was tatsächlich in der kompilierten DLL verwendet wird.

Geben Sie hier die Bildbeschreibung ein

toddmo
quelle
1
Ich denke das ist eine großartige Lösung! Schreiben Sie VS-Plugins? :) ILSpy hat ein Plugin, und ich werde sehen, ob es irgendwie einfach halbautomatisiert werden kann ...
Steven Coco
@StevenCoco Ich habe es schon lange nicht mehr getan, aber die IDE-API ist ziemlich einfach mit vielen guten Beispielen im Internet. Viel Glück und aktualisieren Sie uns mit Ihrem Projekt, wenn Sie es fertig haben!
Toddmo
0

Da VisualStudio (oder ist es msbuild?) Nicht verwendete Referenzen erkennt und diese nicht in die Ausgabedatei aufnimmt, können Sie ein Skript schreiben, das die Referenzen aus dem csproj analysiert und diese mit den durch Reflexion auf der referenzierten Assemblies vergleicht Projektausgabe.

Wenn Sie motiviert sind ...

Benjol
quelle
1
Das ist nicht immer richtig. Wenn Sie beispielsweise die Klasse Foo haben, die von Bar abgeleitet ist, und das statische Mitglied Blah in Bar haben und es als Foo.Blah bezeichnen, müssen Sie Foo in Referenzen für den Compiler zusammenstellen, es wird jedoch nicht ausgegeben in die Ausgabe, da sich das statische Element in Bar befindet. Es gibt noch einige Fälle wie diesen.
Ilya Ryzhenkov
Ja, ich hatte einige "Löcher" in meinem Drehbuch bemerkt und war nie dazu gekommen, herauszufinden, warum. Danke für die Information.
Benjol
0

Ich denke, dass in bin \ kopiert werden, weil in dem Projekt, das die Referenz entfernt hat, Referenz auf ein anderes Projekt haben, die die gleiche Referenz haben ...

hdmq
quelle
0

Wenn Sie wissen, welche Referenzen nicht verwendet werden, können Sie sie manuell entfernen.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Referenz im Knoten Referenzen , und klicken Sie dann auf Entfernen.

Fett
quelle