Resharper - Finde alle nicht verwendeten Klassen


122

Ich kann nicht verwendete Referenzen einer einzelnen Datei finden, indem ich mit der rechten Maustaste auf die Datei klicke und die Option "Verwendungen suchen" auswähle. Gibt es eine Möglichkeit, die Liste aller nicht verwendeten Klassen oder Dateien in meinem Projekt anzuzeigen oder abzurufen?


2
Ich habe in der Vergangenheit ndepend dafür verwendet.
Cine

Antworten:


195

Aktivieren Sie zuerst "Fehler in Lösung analysieren" (klicken Sie mit der rechten Maustaste auf das Resharper-Symbol in der Statusleiste).

Klicken Sie dann mit der rechten Maustaste auf den Lösungsknoten und wählen Sie "Codeprobleme suchen". Im Werkzeugfenster "Prüfergebnisse" können Sie nach "Problemtyp" gruppieren und nach "Typ oder Typelement wird nie verwendet" suchen, um alle nicht verwendeten Klassen (und viele weitere nicht verwendete Symbole) abzurufen.

Eine zweite Option (nach dem Aktivieren von "Fehler in Lösung analysieren") besteht darin, zu einer nicht verwendeten Klasse zu wechseln, Alt + Eingabetaste zu drücken und "Optionen für die Prüfung" Typ oder Typelement ... "auszuwählen Hier finden Sie alle Codeprobleme dieses Typs Ganze Lösung.

Probe des Inspektionsergebnisfensters


41
Nicht verwendete Klassen / Methoden werden unter "Typ oder Typelement wird nie verwendet" unter "Redundanzen in Symboldeklarationen" angezeigt. Ich bin mir nicht sicher, ob dies auf eine Versionsänderung zurückzuführen ist, oder ich sehe es anders.
Bulltorious

4
Dies hat keine unbenutzten Klassen unter irgendwelchen Kategorien mit Resharper 7.1 unter VS2013 unter Windows 8 oder VS2012 unter Windows 7 zurückgegeben.
Sam Jones

1
Zumindest in ReSharper 8 müssen Sie "Fehler in Lösung analysieren" nicht aktivieren, um Ergebnisse zu erhalten.
Pieter van Ginkel

@ SamJones: Sie haben Recht .. es gibt auch keine unbenutzten Klassen unter Resharper 8.1 zurück ...
Revious

3
Resharper 10: In diesem Bericht werden keine nicht verwendeten Klassen angezeigt. Problemumgehung: Suchen Sie eine nicht verwendete Klasse im Code und führen Sie "Ähnliche Probleme in Lösung finden" aus
altumano

17

Die Lösung von @ulrichc klingt perfekt und funktioniert gut für kleine bis mittelgroße Projekte, in denen Sie kein Dependency Injection- Framework wie Castle oder Ninject verwenden, aber was ist, wenn Sie den DI-Container [Castle zum Beispiel] verwenden und Folgendes haben:

public class IoC
{
    private WindsorContainer _container;

    private IoC()
    {
         _container = new WindsorContainer();
    }

    public static void RegisterFromAssembly(Assembly assembly, string classEndsWith, LifeTime lifeTime)
    {
        var lifestyle = ConvertLifeStyleType(lifeTime);

        _container.Register(AllTypes.FromAssembly(assembly)
                  .Where(type => type.Name.EndsWith(classEndsWith))
                  .WithService.AllInterfaces()
                  .Configure(c => c.LifeStyle.Is(lifestyle))
                  .WithService.FirstInterface());
    }
}

Wie Sie sehen können, durchläuft RegisterFromAssembly alle Typen in der Assembly und fügt sie zur Laufzeit blind [basierend auf dem Methodenparameter] zum Container hinzu.

Sie benötigen so etwas wie das Agent Mulder- Plugin, das die Navigation für Typen ermöglicht, die in Ihren Containern registriert oder aufgelöst sind. Dies könnte visuell wieder funktionieren [Entwurfszeit möglicherweise], aber Sie wären nicht wirklich sicher, es sei denn, Sie führen jedes Mal, wenn Sie die nicht verwendete Klasse entfernen, alle Tests in Ihrer Anwendung [jede mögliche Ebene] aus, um zu 80% sicher zu sein, dass Sie sicher sind. Moral der Geschichte: Eine Klasse klingt für Resharper möglicherweise nicht verwendet, wird jedoch möglicherweise wiederbelebt, wenn Sie Dependency Injection verwenden.


3
Nun, nicht nur DI, bei jeder Verwendung von Reflexion könnte diese Lösung fehlschlagen.
Mohayemin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.