Ottieni l'elenco dei codici di riferimento zero in Visual Studio


133

In Visual Studio 2013 il numero di riferimenti di un codice speciale (metodo, proprietà, campo, ...) è mostrato da Code Lens . Voglio ottenere codici inutilizzati (riferimento zero) in Visual Studio. C'è un modo per ottenerli?

Intendo sotto riferimento:

inserisci qui la descrizione dell'immagine


7
Penso che voglia un elenco di tutti i metodi a cui non si fa riferimento, piuttosto che portare a zero il numero di riferimenti di quel particolare metodo.
Jurgen Camilleri il

1
Se non vuole trovare riferimenti inutilizzati, troverete un sacco di domande duplicate. Google per "c # trova codice inutilizzato"
Panagiotis Kanavos il

1
si, voglio trovare tutti i codici inutilizzati contengono metodi, proprietà, ecc.
Nima Rostami,

1
Ricorda che non puoi essere sicuro che a publicnon sia usato senza cercare nell'intera base di codice. Tuttavia, per interni non utilizzati e privati, Analisi del codice ti avviserà se hai attivato l'avviso appropriato.
Matthew Watson,

2
Anni dopo, lo screenshot continua ad essere fuorviante.
Sinjai,

Risposte:


184

Probabilmente il modo migliore e più semplice per ottenere ciò che cerchi è utilizzare lo strumento di analisi del codice integrato con Visual Studio per trovare e portarti direttamente al codice morto e ai membri inutilizzati.

A tal fine, ho creato un nuovo file di set di regole per l'analisi del codice (tramite File-> Nuovo-> File , assicurandomi che Generale nel riquadro a sinistra fosse selezionato e scorrendo verso il basso per trovare il set di regole di analisi del codice , assegnandogli un nome file, quindi cercando e selezionando le seguenti regole). Vedi sotto per il contenuto del file del set di regole che puoi copiare e incollalo in un nuovo file con l'estensione .ruleset da usare.

Dato un file di set di regole, è possibile fare clic con il pulsante destro del mouse su un file di progetto nel pannello Esplora soluzioni e selezionare Proprietà . Nella finestra delle proprietà del progetto, fai clic sulla scheda Analisi del codice nel pannello di sinistra, quindi fai clic su Apri per accedere al percorso del file .ruleset. Se vai alle proprietà di un file di soluzione (al contrario di un file di progetto), puoi impostare il file di analisi del codice per ciascun progetto nella soluzione in un unico posto (in Impostazioni analisi codice e utilizzando il menu a discesa lì per selezionare il file del set di regole NOTA: è necessario aver precedentemente consultato il file del set di regole per visualizzarlo nel menu a discesa in questa finestra delle proprietà).

Quindi esegui semplicemente l'analisi del codice sui progetti / sulla soluzione (tramite Analizza-> Esegui analisi del codice sulla soluzione -OPP- Alt + F11 ) e tornerà come avvertenze, eventuali metodi non referenziati o membri inutilizzati che trova. Troverà anche metodi a cui fa riferimento un metodo, che a sua volta non ha riferimenti altrove.

Fai attenzione, tuttavia, poiché uno dei modi in cui l'analisi del codice per il codice morto può indirizzarti in modo errato, è se il riferimento è 'nascosto' chiamando sempre e solo il metodo tramite delegati e, naturalmente, riflessione.

Le regole per rilevare il codice morto, in particolare, sono:

  • Metodi privati ​​che non sono chiamati da nessun altro codice (CA1811)
  • Variabili locali non utilizzate (CA1804)
  • Campi privati ​​non utilizzati (CA1823)
  • Parametri non utilizzati (CA1801)
  • Classi interne che non sono istanziate da nessun altro codice (CA1812).
  • Codice guasto nello switch limitato OR bit a bit (C6259)

Di seguito è riportato il contenuto del file .ruleset che può essere ottenuto seguendo i passaggi precedenti, per la tua convinenza. Puoi semplicemente copiare l'XML seguente, incollarlo in notepad ++, salvare da qualche parte con l'estensione .ruleset , cercare e utilizzare come spiegato sopra:

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Dead Code Rules" Description=" " ToolsVersion="12.0">
  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
    <Rule Id="CA1801" Action="Warning" />
    <Rule Id="CA1804" Action="Warning" />
    <Rule Id="CA1811" Action="Warning" />
    <Rule Id="CA1812" Action="Warning" />
    <Rule Id="CA1823" Action="Warning" />
  </Rules>
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C6259" Action="Warning" />
  </Rules>
</RuleSet>

30
Non penso che questo risponda completamente alla domanda. La differenza principale è che CodeLens ti dirà che un metodo PUBLIC ha zero riferimenti in un'intera soluzione. Questa è la chiave FxCop, R # e il tuo metodo ideale per tutto ciò che non è pubblico.
Scott Wylie,

1
@ScottWylie - Non sono d'accordo. Ho appena provato la soluzione di cui sopra e non ha contrassegnato i metodi pubblici senza riferimenti. CodeLens è stato eccezionale nel segnalare il codice morto, roba locale non referenziata e variabili non utilizzate. Penso che questo ottenga la maggior parte delle persone esattamente ciò che vogliono senza usare uno strumento di terze parti.
Mike

7
@mike Consideralo: se vuoi trovare un codice morto con un'operazione di massa, tendi a non preoccuparti dei membri privati ​​/ protetti, perché si tratta di problemi locali. Ad esempio, sto migrando un progetto 500k + LoC con oltre 100 progetti e 10+ soluzioni verso un'architettura modello di repository. Dopo aver migrato un componente, devo sapere quali vecchie interfacce posso eliminare. Alcuni IDE come Eclipse hanno strumenti proprio per questo. I metodi locali in grigio non sono semplicemente la mia preoccupazione, vorrei un elenco di classi / interfacce PUBBLICHE in cui il codice obiettivo mi dicesse "0".
Oliver Schimmer

0

https://scottlilly.com/c-code-quality-improvement/remove-unused-classes-properties-and-functions/

"Sfortunatamente, [in Visual Studio Analysis] è possibile rilevare solo membri privati ​​inutilizzati. Questo perché l'analizzatore di codice presuppone che i membri pubblici possano essere utilizzati da altri programmi. Questo potrebbe essere vero se li pubblichi come API tramite un servizio Web o rilasciando il tuo codice come libreria ... ReSharper ha funzioni di analisi del codice simili, con il vantaggio di verificare la presenza di membri pubblici non utilizzati. "


0

Vorrei scorrere ogni file, eseguire il comando Ctrl-MO per comprimere tutto, quindi scorrere in giro cercando il riferimento 0.


-1

Ecco un modo manuale per ottenere questo risultato che ho usato per trovare le classi inutilizzate che sono contrassegnate come pubbliche.

  1. Cerca e sostituisci tutte le "classi pubbliche" con "classe privata" per un progetto nella tua soluzione. Potrebbe anche essere necessario sostituire "classe statica pubblica" e / o "classe astratta pubblica".
  2. Costruisci per trovare tutti gli errori
  3. Per ogni errore nella build, utilizzare il controllo del codice sorgente per ripristinare il file per la classe di riferimento.
  4. Ripetere l'operazione per ogni errore fino a quando la compilazione non riesce.
  5. Eventuali file rimanenti che non sono stati ripristinati sono probabilmente candidati alla rimozione.
  6. (facoltativo) Rinomina le classi nei file sopra e fai un'altra build per trovare gli errori.
  7. Esegui un'ultima ricerca per il nome della classe che desideri rimuovere per confermare che non vi siano istanze di utilizzo in riflessioni o stringhe magiche.
  8. Rimuovere i file di classe non utilizzati identificati.
  9. Ripetere l'operazione per ogni progetto di soluzione che si desidera pulire.

Nota: se non segui la regola di una classe per file, ciò richiederà molto più lavoro. Inoltre, tutti gli endpoint del servizio API necessari per verificare che non vengano utilizzati da alcun progetto esterno.


14
Questo non è affatto pratico.
Don Rolling,

1
Funziona per me in un grande progetto ed è una soluzione. I casi possono variare dove è più difficile, ma volevo fornirlo come una possibilità.
Ulfius,
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.