Suchen nach nicht verwendeten Klassen in C # app

8

Ich bin ein C # / .net / Visual Studio noob. Ich habe eine halbfertige C # -Anwendung für ein Mobiltelefon geerbt. Im Laufe des Debugging bin ich auf mehrere halbfertige Klassen gestoßen, die nirgendwo sonst im Code zu verwenden scheinen. Gibt es eine Möglichkeit zu ermitteln, ob eine Klassendefinition irgendwo instanziiert wird?

    
limscoder 27.04.2010, 19:10
quelle

7 Antworten

14

Am schnellsten (in Visual Studio) können Sie mit der rechten Maustaste auf den Typnamen klicken und im Kontextmenü Alle Referenzen suchen auswählen. Dadurch werden alle Orte angezeigt, an denen in der aktuellen Lösung auf diesen Typ verwiesen wird.

    
Andrew Hare 27.04.2010, 19:13
quelle
3

Du solltest Resharper erhalten - es wird "toten" Code in Grau anzeigen und das Refactoring viel einfacher machen! Möglicherweise möchten Sie auch CodeRush .

    
Dead account 27.04.2010 19:11
quelle
2

Ohne ReSharper oder ein ähnliches Werkzeug können Sie immer eine Dateisuche nach "new ClassName" (in der gesamten Lösung) durchführen.

    
Adam Lear 27.04.2010 19:12
quelle
1

Ich fange normalerweise mit Shift-F12 an (oder klicke mit der rechten Maustaste auf den Klassennamen und wähle "Alle Referenzen finden")

    
Eric King 27.04.2010 19:14
quelle
0

Wenn Sie den Code und die Module, die ihn verwenden, nicht kennen, sollten Sie CodeRush oder Resharper verwenden.

Keine der anderen Antworten erwähnt die Modifikatoren, die auf Klassen / Funktionen angewendet werden können. Sie sollten sicherlich den Umfang berücksichtigen, bevor Sie den Code löschen. Sie haben möglicherweise andere Assemblys, die Klassen / Funktionen verwenden.

    
Greg Bogumil 27.04.2010 19:16
quelle
0

Sie können alle Klassen auflisten (nach class [a-zA-Z0-9_]+ suchen) und dann nach new <classname> suchen. Die bei der zweiten Suche nicht gefundenen werden nicht verwendet. Natürlich würde ein einfaches Skript in Ihrer bevorzugten Skriptsprache helfen.

Sie müssen jedoch die Klassen herausfiltern, die als Basisklassen verwendeter Klassen verwendet werden.

Beachten Sie, dass Sie auf diese Weise die Klassen nicht finden, die nur aus nicht verwendeten Klassen verwendet werden, sodass möglicherweise mehrere Iterationen erforderlich sind. Wenn zwei Klassen einander verwenden (aber nicht von außen verwendet werden), kann das Entfernen dieser Klassen zusätzlichen Aufwand erfordern.

Bearbeiten:
Ein besserer Ansatz wäre die Erstellung der Abhängigkeitsstruktur: Für jede der Klassen definieren Sie, welche Klasse von dieser Klasse verwendet wird und welche Klasse eine Basisklasse für diese Klasse ist. Auf diese Weise finden Sie, welche Klassen für jede einzelne Klasse erforderlich sind. Dann können Sie definieren, welche Klassen (direkt oder indirekt) von der Klasse benötigt werden, die Main enthält. Alle anderen Klassen sind "nicht erreichbar" und werden daher nicht verwendet.

Dieser Ansatz wird jedoch die durch Reflexion instanziierten Klassen entfernen. Nun, es gibt keine Möglichkeit, zur Kompilierzeit herauszufinden, welche Klassen sowieso durch Reflektion instanziiert werden.

Vielleicht ist die Verwendung der fertigen Tools (wie andere vorgeschlagen) eine einfachere Alternative.

    
Vlad 27.04.2010 19:12
quelle
0

Entfernen Sie sie aus dem Projekt und lassen Sie Ihre Einheit testen (ähm, haben Sie die richtigen?) und Ihr QA-Team (Sie haben das richtig?) identifizieren Sie die Probleme.

Witze beiseite, wenn es so offensichtlich ist, dass es nicht vollständig ist, warum nicht einfach den Code entfernen und neu kompilieren?

Die nächsten Schritte, die ich ausführen würde, wären Werkzeuge wie "Find All References" oder Resharper (hat es sogar eine Funktion, um das zu tun?)

    
Jeff Meatball Yang 27.04.2010 19:33
quelle

Tags und Links