Resharper- Znajdź wszystkie nieużywane klasy


122

Wiem, jak znaleźć nieużywane odniesienia do pojedynczego pliku, klikając plik prawym przyciskiem myszy i wybierając opcję „Znajdź zastosowania”. Czy istnieje sposób, aby wyświetlić lub pobrać listę wszystkich nieużywanych klas lub plików w moim projekcie?


2
Używałem do tego ndepend w przeszłości.
Cine,

Odpowiedzi:


195

Najpierw włącz „Analizuj błędy w rozwiązaniu” (kliknij prawym przyciskiem myszy ikonę Resharper na pasku stanu).

Następnie kliknij prawym przyciskiem myszy węzeł rozwiązania i wybierz „Znajdź problemy z kodem”. W oknie narzędzia „Wyniki inspekcji” można pogrupować według „Typu sprawy” i wyszukać „Typ lub typ składowy nigdy nie jest używany”, aby uzyskać wszystkie nieużywane klasy (i wiele innych nieużywanych symboli).

Drugą opcją (po włączeniu „Analizuj błędy w rozwiązaniu”) jest przejście do dowolnej nieużywanej klasy, wciśnięcie Alt + Enter, wybranie opcji „Opcje dla inspekcji„ Typ lub typ elementu członkowskiego ... ”| Znajdź wszystkie problemy z kodem tego typu | Całe rozwiązanie.

Przykład okna wyników kontroli


41
Nieużywane klasy / metody pojawiają się w sekcji „Typ lub typ składowy nigdy nie jest używany” w sekcji „Zwolnienia w deklaracjach symboli”. Nie jestem pewien, czy jest to spowodowane zmianą wersji, czy też patrzę na to inaczej.
brutalny

4
To nie zwróciło żadnych nieużywanych klas w żadnej kategorii używającej Resharper 7.1 w VS2013 w Windows 8 lub VS2012 w Windows 7.
Sam Jones

1
Przynajmniej w ReSharper 8 nie musisz włączać opcji „Analizuj błędy w rozwiązaniu”, aby uzyskać wyniki.
Pieter van Ginkel

3
Resharper 10: Ten raport nie pokazuje niewykorzystanych klas. Obejście: znajdź w kodzie nieużywaną klasę i wykonaj „Znajdź podobne problemy w rozwiązaniu”
altumano,

1
Nadal łamane w Resharper 2018.1 :( wykonaj powyższe obejście, ale jeśli nie można łatwo znaleźć nieużywaną klasę (lub metody), a następnie tymczasowo stworzyć jedną, a następnie zrobić „Znajdź podobne problemy w roztworze” używając go
Ray

17

Rozwiązanie @ulrichc brzmi idealnie i działa dobrze dla małych i średnich projektów, w których nie używasz żadnego frameworka Dependency Injection , takiego jak Castle lub Ninject, ale co, jeśli używasz kontenera DI [na przykład Castle] i masz coś takiego:

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());
    }
}

Jak widać, RegisterFromAssembly przechodzi przez wszystkie typy wewnątrz zestawu i ślepo [na podstawie parametru Methods] dodaje je do kontenera w czasie wykonywania.

Będziesz potrzebował czegoś takiego jak wtyczka agenta Mulder, która zapewnia nawigację dla typów zarejestrowanych lub rozwiązanych w twoich kontenerach. To znowu może wizualnie zadziałać [prawdopodobnie czas projektowania], ale tak naprawdę nie byłbyś pewny, chyba że za każdym razem, gdy usuwasz nieużywaną klasę, uruchamiasz wszystkie testy w aplikacji [każda możliwa warstwa], aby mieć 80% pewności, że jesteś bezpieczny. Morał z tej historii: klasa może wydawać się nieprzyzwoita dla Resharper, ale może zostać wskrzeszona, gdy użyjesz Dependency Injection.


3
Cóż, nie tylko DI, dla jakiegokolwiek zastosowania refleksji to rozwiązanie może zawieść.
Mohayemin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.