Resharper- Trova tutte le classi inutilizzate


122

So come trovare i riferimenti inutilizzati di un singolo file facendo clic con il pulsante destro del mouse sul file e selezionando l'opzione "Trova usi". C'è un modo per vedere o ottenere l'elenco di tutte le classi o file non utilizzati nel mio progetto?


2
Ho usato ndepend per questo in passato.
Cine

Risposte:


195

Per prima cosa abilita "Analizza errori in soluzione" (fai clic con il pulsante destro del mouse sull'icona Resharper nella barra di stato).

Quindi fare clic con il pulsante destro del mouse sul nodo della soluzione e selezionare "Trova problemi di codice". Nella finestra degli strumenti "Risultati dell'ispezione" puoi raggruppare per "Tipo di problema" e cercare "Il tipo o il membro del tipo non viene mai utilizzato" per ottenere tutte le classi non utilizzate (e molti altri simboli non utilizzati).

Una seconda opzione (dopo aver abilitato "Analizza errori nella soluzione") è quella di andare a qualsiasi classe inutilizzata, premere Alt + Invio, selezionare "Opzioni per l'ispezione" Tipo o tipo membro ... "" | Trova tutti i problemi di codice di questo tipo | Soluzione intera.

Campione della finestra dei risultati dell'ispezione


41
Classi / metodi inutilizzati vengono visualizzati in "Tipo o il membro del tipo non viene mai utilizzato" in "Ridondanze nelle dichiarazioni di simboli". Non sono sicuro se ciò sia dovuto a un cambio di versione o lo sto guardando in modo diverso.
bulltorious

4
Questo non ha restituito alcuna classe inutilizzata in nessuna categoria utilizzando Resharper 7.1 su VS2013 su Windows 8 o VS2012 su Windows 7.
Sam Jones

1
Almeno in ReSharper 8, non è necessario abilitare "Analizza errori nella soluzione" per ottenere risultati.
Pieter van Ginkel

@SamJones: hai ragione .. non restituisce anche classi inutilizzate con Resharper 8.1 ...
Revious

3
Resharper 10: questo rapporto non mostra le classi inutilizzate. Soluzione alternativa: trova una classe inutilizzata nel codice e fai "Trova problemi simili nella soluzione"
altumano

17

La soluzione di @ulrichc sembra perfetta e funziona bene per progetti di peso medio-piccolo in cui non stai utilizzando alcun framework di Dependency Injection come Castle o Ninject, ma cosa succede se stai usando il contenitore DI [Castle per esempio] e hai qualcosa di simile al seguente:

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

Come puoi vedere RegisterFromAssembly passa attraverso tutti i tipi all'interno dell'assembly e alla cieca [in base al parametro dei metodi] li aggiunge al contenitore in fase di esecuzione.

Avrai bisogno di qualcosa di simile plugin dell'agente Mulder che fornisce la navigazione per i tipi registrati o risolti all'interno dei tuoi contenitori. Anche questo potrebbe funzionare visivamente [in fase di progettazione] ma non saresti veramente sicuro a meno che ogni volta che rimuovi la classe inutilizzata non esegui tutti i test all'interno della tua applicazione [ogni livello possibile] per essere sicuro all'80% di essere al sicuro. Morale della storia: una classe potrebbe sembrare inutilizzata per Resharper ma potrebbe essere resuscitata quando si utilizza Dependency Injection.


3
Beh, non solo DI, per qualsiasi uso della riflessione quella soluzione potrebbe fallire.
Mohayemin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.