Entfernen aller nicht verwendeten Referenzen aus einem Projekt in Visual Studio-Projekten

263

Ich habe mich nur gefragt, ob es in verschiedenen Visual Studio-Versionen möglich ist, automatisch alle Referenzen aus einem Projekt zu entfernen, die nie verwendet wurden.

Geben Sie in Ihrer Antwort an, für welche Version von VS die Lösung gilt.

KroaX
quelle
4
Im Allgemeinen fragen Sie sich: Führt das Entfernen dieser DLLs zu einer beobachtbaren Verbesserung der Erstellungszeit oder zu etwas anderem? (Natürlich außer das Entfernen redundanter Abhängigkeiten)
monish001
3
Gibt es eine ähnliche kostenlose Erweiterung für VS2015?
George Birbilis
1
VB.Net-Projekt haben es seit VS 2005, aber es wurde nie für C # -Projekte implementiert msdn.microsoft.com/en-us/library/7sfxafba
Slai
4
Sie können dafür stimmen , dass diese Funktion Teil von VS ist (wie es sein sollte).
Mike Lowery
2
@ monish001 - Jede Assembly und jedes Asset erhöht den Bereitstellungs-Footprint und ist eine weitere Sache, die verwaltet / gewartet werden muss oder eine potenzielle Fehlerquelle darstellt.
StingyJack

Antworten:

55

Wenn Sie Resharper (Plugin) installiert haben, können Sie über den Projektmappen- Explorer> (Rechtsklick) Referenzen> Referenzen optimieren ... auf eine Funktion zugreifen, mit der Sie verwendete Referenzen analysieren können.

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

Diese Funktion behandelt nicht richtig:

  • Abhängigkeitsinjektierte Baugruppen
  • Dynamisch geladene Assemblys (Assembly.LoadFile)
  • Native Code-Assemblys, die über Interop geladen werden
  • ActiveX-Steuerelemente (COM-Interop)
  • Andere kreative Möglichkeiten zum Laden von Baugruppen

Geben Sie hier die Bildbeschreibung ein

Ernest
quelle
1
Ihre letzte Aussage "Obwohl es nicht perfekt ist, werden Assemblys, die von Assemblys in Ihrem aktuellen Projekt abhängig sind, weiterhin als nicht verwendet markiert." ist eigentlich kein problem. Der Build kann die Referenzen Ihrer Referenzen kopieren. Siehe diese Antwort: stackoverflow.com/a/2290139/26262
Ed Greaves
Während dies ein praktikabler Weg ist, bedeutet das "innerhalb verschiedener Visual Studio-Versionen" für mich nicht etwas anderes, sondern bereits "innerhalb"
Mark Schultheiss
28

Die Resharper-Erweiterung erledigt dies für Sie.

Diese Erweiterung unterstützt Visual Studio 2005 bis 2017.

Während der Compiler keine nicht verwendeten Assemblys enthält, verlangsamt die externe Verwendung von Anweisungen und Referenzen Visual Studio und Intellisense, da die Tools mehr Code berücksichtigen müssen.

Mathieson
quelle
12
dass man in unserem Projekt viele unbenutzte Referenzen gefunden hat - aber einige davon wurden wirklich verwendet ... Also vertraue ich Resharper nicht mit Referenzen
Offler
5
Resharper verbraucht Tonnen Speicher in großen Projekten, wenn es viele Referenzen gibt, die schließlich VS
Cemre
2
@eraj VS Express-Editionen unterstützen keine Erweiterungen. Holen Sie sich die kostenlose Community-Edition, die Erweiterungen wie ReSharper unterstützt.
Codemonkeh
4
Pete, jedes automatisierte Tool hat die Möglichkeit, zu weit zu gehen. Insbesondere im Zeitalter von DI- und PCL-Abhängigkeiten, die als nicht unbegründet erscheinen, sind sie möglicherweise erforderlich, aber das ist kaum die Schuld des Tools. Anstatt einen Screenshot zu machen, sollten Sie eine Versionskontrollsoftware verwenden. Mit einem modernen System wie Git oder Hg können Sie häufig lokal einchecken, damit Sie nie die Arbeit verlieren.
Mathieson
2
Soweit ich das beurteilen kann, zeigt Resharper unbenutzte Namespaces an, keine Assembly-Referenzen, was meiner Meinung nach die Frage "unbenutzte Referenzen aus einem Projekt" bedeutet. Ich würde gerne auch Letzteres finden
Sonic Soul
28

Sie können die kostenlose VS2010-Erweiterung: Reference Assistant by Lardite group ausprobieren. Es funktioniert perfekt für mich. Mit diesem Tool können Sie nicht verwendete Referenzen finden und auswählen, welche Referenzen entfernt werden sollen.

Verrückt
quelle
3
Funktioniert nicht mit MVC-Projekt. Es entfernt wichtige DLL als .Helpers und .WebPage
User.Anonymous
3
@Amit die Erweiterung hat jetzt
Philipp M
Das funktioniert, wenn Sie einem einfachen Trick folgen: devio.wordpress.com/2014/12/03/…
Ravi Punjwani
5
und für VS2019?
DARKGuy
21

In einem Visual Basic-Projekt wird das Entfernen von "nicht verwendeten Referenzen" unterstützt (Projekt -> Referenzen -> nicht verwendete Referenzen). In C # gibt es keine solche Funktion.

Die einzige Möglichkeit, dies in einem C # -Projekt (ohne andere Tools) zu tun, besteht darin, mögliche nicht verwendete Assemblys zu entfernen, das Projekt zu kompilieren und zu überprüfen, ob während der Kompilierung Fehler auftreten. Wenn keine Fehler auftreten, haben Sie eine nicht verwendete Assembly entfernt. ( Siehe meinen Beitrag )

Wenn Sie wissen möchten, welches Projekt (Baugruppe) von anderen Baugruppen abhängt, können Sie NDepend verwenden .

Jehof
quelle
2
In VS 2008/2010 gibt es eine Menüoption mit der rechten Maustaste zum Entfernen oder Entfernen und Sortieren von Verwendungen.
JohnB
11
@ JohnB: Natürlich haben Sie Recht, aber seine Frage bezieht sich auf Verweise (auf Assemblys) und nicht auf Verwendungen (von Namespaces).
Jehof
VS2012: Menü: Projekt-> Eigenschaften-> Referenzen-> Nicht verwendete Referenzen.
LosManos
21

Für Visual Studio 2013/2015/2017 gibt es eine Erweiterung, die genau das tut, was Sie wollen: ResolveUR . Was dies im Grunde tut, ist:

  • Referenz wird im Projekt entfernt
  • Projekt wird mit msbuild kompiliert
  • Überprüfen Sie, ob Build-Fehler vorliegen
  • Entfernen Sie entfernte Referenzen, wenn Buildfehler aufgetreten sind.
Claudiu Constantin
quelle
habe es gerade für VS 2017 Community Edt installiert. - funktioniert soweit gut.
Thomas
Es heißt, es gibt Build-Fehler, aber es gibt keinen Build-Fehler, wenn ich baue, so dass es nicht funktioniert vs2015 Comm edtion
Raghavendra
Sie können ein Problem auf der Seite des Githubs erstellen: github.com/subatta/ResolveUR/issues
Claudiu Constantin
5
2,5 von 5 Sternen auf Visual Studio Marketplace aus 52 Bewertungen haben mich ein bisschen abgeschreckt
ECH
Ich habe es in einem MVC-Projekt versucht und es wird vorgeschlagen, einige wichtige Abhängigkeiten wie System.Web.Helpers zu entfernen, daher zögere ich, es alleine loszulassen.
Jahaziel
18

Alles, was Sie brauchen, ist Stein und Knöchel, dann können Sie es wie ein Höhlenmensch tun.

  1. Entfernen Sie nicht verwendete Namespaces (für jede Klasse).
  2. Führen Sie den Debug-Build aus
  3. Kopieren Sie Ihre ausführbaren und verbleibenden Namespace-Referenzen an einen neuen Speicherort
  4. Führen Sie die ausführbare Datei aus
  5. Fehlender Referenz-DLL-Fehler tritt auf
  6. Kopieren Sie die erforderliche DLL aus dem Debug-Ordner
  7. Wiederholen Sie 4-6
  8. Gu Gu Ga Ga?
  9. Wirf deinen Stein

Sie können sich auch auf Ihre Build-Tools verlassen, um zu erfahren, welche Referenz noch erforderlich ist. Es ist die Ära von VS 2017, Höhlenmensch hat noch überlebt.

Eark
quelle
Haha, nun, nichts falsch mit ein bisschen Humor hier. Der Stoneman-Ansatz sieht in der Tat so aus, als hätten wir ohne die aufwendige Enterprise Edition das, was wir gerade haben.
Nicholas Petersen
16

Für alle, die hierher kommen und Visual Studio 2012 suchen :

Laden Sie den Referenzassistenten für Visual Studio 11 herunter und installieren Sie ihn

Später können Sie tun:

Geben Sie hier die Bildbeschreibung ein

Habib
quelle
1
Der Referenzassistent für Visual Studio 11 scheint ungenau zu sein. Er zeigte mir eine Reihe nicht verwendeter Referenzen, von denen ich wusste, dass sie tatsächlich verwendet werden (über Nuget installiert).
Bill Yang
1
Funktioniert nicht mit MVC-Projekt. Es entfernt wichtige DLL als .Helpers und .WebPage
User.Anonymous
Ja, das kam zurück, um mich mit einem WPF C # -Programm in den Arsch zu beißen.
Charles Clayton
Keine Option in VS2017
Nathan
1
Existiert auch nicht in VS2019
Vin Shahrdar
15

In den Visual Studio-Versionen 2017 und 2015 können Sie dies mit der Code Map- Funktion tun. Diese Funktion ist jedoch nur in der Enterprise Edition verfügbar , nicht in der Community- oder der Professional- Version.

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten und wählen Sie "In Code Map anzeigen". Dadurch wird Ihre DLL als einzelner Knoten in einem leeren Diagramm angezeigt. Klicken Sie mit der rechten Maustaste auf diesen Knoten in der Codezuordnung und wählen Sie "Baugruppen diese Referenzen anzeigen". Dadurch wird ein zusätzlicher Knoten namens "Externals" hinzugefügt, der erweitert werden kann, um nur die Assemblys anzuzeigen, auf die tatsächlich verwiesen wird.

Geben Sie hier die Bildbeschreibung ein

Glenn Slayden
quelle
1
Wenn Sie über eine Enterprise Edition verfügen und diese Option im Kontextmenü nicht sehen, müssen Sie die Funktion "Code Map" im VS-Installationsprogramm im Bereich "Einzelkomponenten" installieren.
StingyJack
Dies ist eine gute, danke @Glenn. Ich möchte nur sagen, dass ich Micosoft.Office.Interop.Excel verwendet habe und es nicht unter den anderen Referenzen aufgeführt war, also muss ich immer noch etwas vorsichtig sein.
Emil Filip
14

In Visual Studio 2013 funktioniert diese Erweiterung: ResolveUR

Allgemeiner Misserfolg
quelle
15
@abarisone Ihre generische Antwort "Verwenden Sie keinen Link als Antwort" sollte wirklich nur verwendet werden, nachdem Sie die Antwort tatsächlich angeschaut haben. Der Link ist das einzige, was für diese Antwort relevant ist. Es handelt sich um einen Link zu einem VS-Plugin, sodass nichts anderes relevant ist.
Charles Boyung
Ich stimme Charles zu. Dies scheint ein Missbrauch der Moderation durch @abarisone zu sein. Diese Antwort hat mir wirklich geholfen, Zeit zu sparen, und ich hätte es gehasst, wenn irgendwelche Mods ihre Kräfte missbraucht hätten, um sie zu löschen.
Zun
@Zun Erstens war ich noch nie Moderator oder habe es behauptet. Ich wollte nach weiteren Informationen über die Erweiterung fragen. Es mag an meiner Seite oberflächlich gewesen sein, aber ich wollte sicherlich keinen Missbrauch begehen.
Abarisone
12

Einige Leute schlugen vor, ein großartiges Tool zu verwenden - den Referenzassistenten für Visual Studio . Das Problem ist, dass VS2012 das neueste unterstützte Visual Studio ist. Aber es gibt auch die Möglichkeit, es in VS2013 zum Laufen zu bringen;)

Und so geht's:

1) Laden Sie Lardite.RefAssistant.11.0.vsix herunter

2) Ändern Sie die Erweiterung in zip: Lardite.RefAssistant.11.0.vsix->Lardite.RefAssistant.11.0.zip

3) Entpacken und öffnen Sie die extension.vsixmanifestDatei im Texteditor

4) Finden Sie alle Vorkommen von InstallationTarget Version="[11.0,12.0)"und ersetzen Sie sie durch InstallationTarget Version="[11.0,12.0]"(beachten Sie die schließende Klammer)

5) Speichern Sie die Datei und komprimieren Sie alle Dateien so, dass sie sich auf der Root-Zip-Ebene befinden

6) Ändern Sie die Erweiterung des neuen zipinvsix

7) Installieren und genießen :)

Ich habe es mit VS2013 getestet, danke Quelle für das Tutorial

BEARBEITEN Zur Unterstützung der VS 2015 Community Edition hinzufügen

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

Bedeutung der Klammern

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.
VladL
quelle
1
Das funktioniert gut! Scheint dann wie ein einfacher Tippfehler, der vor Jahren vom Autor behoben worden sein könnte - aber er scheint verschwunden zu sein, zumindest hat die Website ...
wexman
Es ist kein Tippfehler, aber die am höchsten unterstützte VS-Version :). Der Entwickler soll sein Add-On mit jeder neuen VS-Version testen und die Anzahl erhöhen, aber aus irgendeinem Grund haben sie das nicht getan.
VladL
Denken Sie daran, das Kopieren und Einfügen von Inhalten zu beenden. :)
Rikki
@ RikkiRockett Sprichst du mich an? Ich habe die Quelle in meiner Antwort verlinkt. Oder was genau meinst du?
VladL
2
Nee Mann. Ich scherzte. Ich sage nur zu dem Kerl, der ")" anstelle von "]" gesetzt hat, der uns alle dazu gebracht hat, Ihre Anweisungen durchzugehen. :) Gute Arbeit, habe einfach getan, was du gesagt hast und alles in Ordnung! Du hast mir gerade einen Tag damit erspart. (y)
Rikki
7

Sie können die Reference Assistant-Erweiterung aus der Visual Studio-Erweiterungsgalerie verwenden.

Wird verwendet und funktioniert für Visual Studio 2010.

eka808
quelle
2
Sie müssen mit Webprojekten vorsichtig sein. Es werden DLLs gemeldet, die als "nicht verwendet" verwendet werden.
Miro J.
Ich stimme Miro zu. Ich habe versucht, dies mit meinem Webprojekt zu verwenden, und es wurden zwei Dutzend Referenzen ausgewählt, die zum Ausführen meiner Webanwendung erforderlich waren (System.Web. *, Ninject. *, EntityFramework, um nur einige zu nennen).
Denis M. Kitchen
Funktioniert nicht mit MVC-Projekt. Es entfernt wichtige DLL als .Helpers und .WebPage
User.Anonymous
1

Mit DevExpress folge ich diesen Anweisungen:

  1. Wechseln Sie in VS zu DevExpress - Editor - Code Cleanup. Aktivieren Sie unter Regeln die Option "Nicht verwendete Namespace-Referenzen entfernen". OK klicken.
  2. Klicken Sie mit der rechten Maustaste auf die Lösung und wählen Sie "Code Cleanup". Die Bereinigung dauert einige Minuten und ist abgeschlossen.
  3. Erstellen Sie Ihre Anwendung
IndieTech-Lösungen
quelle
-3

Die folgende Methode hängt nicht von Add-Ons ab und ist nicht sehr schmerzhaft.

Gehen Sie jede Ihrer Quelldateien durch und

  1. Alle auswählen (Strg-A)
  2. Umrisserweiterung umschalten (Strg-M, M). Dadurch wird die Datei auf zwei Zeilen reduziert.
  3. Klicken Sie auf das '+' des Namespace. Dadurch wird jede Klasse der Datei als einzelne Zeile angezeigt. Scannen Sie den Referenzzähler jeder Klasse nach nicht referenzierten Klassen.
  4. Klicken Sie auf jede der Klassen '' + '. Dadurch wird jede Klassenfunktion als einzelne Zeile angezeigt. Scannen Sie den Referenzzähler jeder Funktion nach nicht referenzierten Funktionen.

Das Scannen jeder Datei nach '0 Referenz' dauert nur eine Sekunde.

Das Scannen eines gesamten Projekts dauert nur wenige Minuten.

NoBrassRing
quelle
-10

In VB2008 funktioniert dies folgendermaßen:

Project>Add References

Klicken Sie dann auf die Registerkarte Zuletzt verwendet, um eine Liste der zuletzt verwendeten Referenzen anzuzeigen. Suchen Sie die gewünschte und löschen Sie sie. Dann schließen Sie, ohne etwas hinzuzufügen.

Codelearner
quelle
1
Dies überprüft nicht, ob die Referenz verwendet wird
Xavier Poinas
-12

So entfernen Sie eine Referenz in Visual C # Öffnen Sie im Projektmappen-Explorer den Knoten Referenzen unter dem Projektknoten. Klicken Sie mit der rechten Maustaste auf eine Referenz und klicken Sie auf Entfernen.

Halit Can
quelle
3
Dies scheint weder auf unbenutzte noch auf automatische Funktionen beschränkt zu sein.
Nathan Tuggy
Es ist kein automatischer Betrieb.
Amir
gut versucht, aber schlechte Antwort, nicht automatisch wie zuvor gesagt