Rimuovi i riferimenti inutilizzati (! = "Utilizzo")


100

Come posso trovare ed eliminare i riferimenti inutilizzati nei miei progetti?

So che puoi facilmente rimuovere le istruzioni using nel vs 2008, ma questo non rimuove il riferimento effettivo nei tuoi progetti. La dll a cui si fa riferimento verrà comunque copiata nel pacchetto bin / setup.


Grazie. Purtroppo, nessuna risposta stavo cercando ...
Boris Callens

Risposte:


55

* Nota: vedere http://www.jetbrains.net/devnet/message/5244658 per un'altra versione di questa risposta.

Leggendo i post, sembra che ci sia un po 'di confusione sulla domanda originale. Fammi provare.

Il post originale pone davvero la domanda: "Come faccio a identificare e rimuovere i riferimenti da un progetto di Visual Studio ad altri progetti / assembly che non sono in uso?" Il poster desidera che gli assembly non vengano più visualizzati come parte dell'output di compilazione.

In questo caso, ReSharper può aiutarti a identificarli , ma devi rimuoverli tu stesso.

Per fare ciò, apri il browser dei riferimenti nel browser della soluzione, fai clic con il pulsante destro del mouse su ogni assembly a cui fa riferimento e seleziona "Trova codice dipendente". Vedere:

http://www.jetbrains.com/resharper/features/navigation_search.html#Find_ReferencedDependent_Code

Otterrai:

  1. Un elenco delle dipendenze da quel riferimento in una finestra del browser, o

  2. Una finestra di dialogo che dice "Il codice dipendente dal modulo XXXXXXX non è stato trovato.".

Se ottieni il secondo risultato, puoi quindi fare clic con il pulsante destro del mouse sul Riferimento, selezionare Rimuovi e rimuoverlo dal tuo progetto.

Anche se devi farlo "manualmente", cioè un riferimento alla volta, porterà a termine il lavoro. Se qualcuno lo ha automatizzato in qualche modo, mi interessa sapere come è stato fatto.

Puoi praticamente ignorare quelli in .Net Framework poiché normalmente non vengono copiati nell'output della build (in genere, sebbene non necessariamente vero per le app Silverlight).

Alcuni post sembrano rispondere alla domanda: "Come rimuovo le clausole using (C #) da un file di codice sorgente che non sono necessarie per risolvere i riferimenti all'interno di quel file".

In questo caso, ReSharper aiuta in un paio di modi:

  1. Identifica le clausole using inutilizzate durante il rilevamento degli errori al volo. Appaiono come avvisi di ispezione del codice: il codice apparirà in grigio (impostazione predefinita) nel file e ReSharper fornirà un suggerimento per rimuoverlo:

    http://www.jetbrains.com/resharper/features/code_analysis.html#On-the-fly_Error_Detection

  2. Consente di rimuoverli automaticamente come parte del processo di pulizia del codice:

    http://www.jetbrains.com/resharper/features/code_formatting.html#Optimizing_Namespace_Import_Directives

Infine, renditi conto che ReSharper esegue l'analisi statica del codice sulla tua soluzione. Quindi, se si dispone di un riferimento dinamico all'assembly, ad esempio tramite la reflection o un assembly caricato dinamicamente in fase di esecuzione e accessibile tramite un'interfaccia, non verrà rilevato. Non c'è nulla che possa sostituire la comprensione del codice di base e delle dipendenze del progetto mentre lavori al tuo progetto. Trovo molto utili le funzionalità di ReSharper.


Bella risposta ampia. Quel Ti dispiacerebbe scambiare le due cose?
Boris Callens,

Andrà bene. La funzionalità di ReSharper precede l'implementazione di Visual Studio. Rimane come viene ottenuto tramite la loro funzione di "correzione automatica": gli smart tag vengono disattivati ​​quando hai ReSharper.
jlo

1
Ora ~ 4 anni dopo ReSharper 6.1 ha ottenuto direttamente la funzione!
Julien Roncaglia

Non sono sicuro di cosa intendi: ReSharper ha questa funzione da anni.
jlo

8
ATTENZIONE: se usi qualsiasi tipo di riflessione per caricare dinamicamente dagli assembly, questa sarà una brutta cosa da fare. Avrai utilizzato il "riferimento" per portare l'assieme con te al contenitore / sito di produzione, ma non ci sarà alcun codice che faccia riferimento direttamente ad esso. UTILIZZARE CON CURA!
Casper Leon Nielsen



5

Prova questo: Assistente di riferimento

Sommario

Reference Assistant aiuta a rimuovere i riferimenti inutilizzati da progetti C #, F #, VB.NET o VC ++ / CLI in Visual Studio 2010.


1
potresti conoscere un'estensione simile per il vs 2012?
isxaker

@isxaker Questa è ora una funzionalità incorporata di resharper
itslittlejohn

4

ReSharper 6.1 includerà queste funzionalità:

  • Ottimizza i riferimenti : analizza i riferimenti agli assembly e il loro utilizzo nel codice, ottieni un elenco di riferimenti ridondanti e rimuovili.

  • Rimuovi riferimenti inutilizzati : refactoring rapido per rimuovere i riferimenti di assembly ridondanti.

  • Eliminazione sicura sui riferimenti agli assembly : eliminerà i riferimenti agli assembly se tutti sono ridondanti, altrimenti annulla gli utilizzi e può rimuovere solo i riferimenti agli assembly ridondanti dell'elenco selezionato.


4

ReSharper lo farà per te (e molto altro ancora!)


Resharper rimuoverà effettivamente il riferimento alla DLL nella cartella Riferimenti? Non penso che faccia questo?
tobinharris

1
Non penso che ... Penso che strappi semplicemente l'istruzione using per uno spazio dei nomi a cui non fai riferimento. FWIW - Coderush offre le stesse funzionalità "e molto altro ancora!" :)
Samurai Ken,

1
Ora ~ 4 anni dopo ReSharper 6.1 ha ottenuto la funzione!
Julien Roncaglia

3

L'ho fatto senza estensione in VS 2010 Ultimate Architecture-> Generate Dependency Graph-> By Assembly, mostra gli assembly usati e rimuove manualmente i riferimenti inutilizzati.


Non lo consiglio per un progetto più ampio. Ho trovato molto difficile discernere cosa fosse e cosa non fosse usato. Tuttavia, sono anche daltonico, quindi questo probabilmente ha influito sull'utilità di questo per me.
DubiousPusher

2

Ho una risposta gratuita che funziona con qualsiasi versione di Visual Studio e qualsiasi versione di Framework. Non rimuove i riferimenti inutilizzati, ma li identifica.

Puoi usare Telerik JustDecompile sulla dll del tuo progetto. Basta aprire la dll in JustDecompile e andare sotto Referencesper vedere cosa viene effettivamente utilizzato nella dll compilata.

inserisci qui la descrizione dell'immagine


1
Penso che sia un'ottima soluzione! Scrivi plugin VS? :) ILSpy ha un plugin e vedrò se può essere facilmente semi-automatizzato in qualche modo ...
Steven Coco

@StevenCoco Non lo faccio da molto tempo, ma l'API IDE è piuttosto semplice con molti buoni esempi su Internet. Buona fortuna e aggiornaci con il tuo progetto se lo fai!
Toddmo

0

Dato che VisualStudio (o è msbuild?) Rileva i riferimenti inutilizzati e non li include nel file di output, è possibile scrivere uno script che analizzi i riferimenti al di fuori di csproj e li confronta con gli assembly di riferimento rilevati dalla riflessione sul output del progetto.

Se sei motivato ...


1
Questo non è sempre corretto. Ad esempio, se hai la classe Foo che deriva da Bar, e hai un membro statico Blah in Bar e lo chiami Foo.Blah, allora devi avere un assembly di Foo nei riferimenti per il compilatore, ma non verrà emesso in output, perché il membro statico è in Bar. Ci sono altri casi come questo.
Ilya Ryzhenkov,

Sì, avevo notato alcuni "buchi" nella mia sceneggiatura, non sono mai riuscito a capire perché. Grazie per le informazioni.
Benjol

0

Penso che vengano copiati in bin \, perché nel progetto che ha rimosso il riferimento hanno riferimenti o altri progetti che hanno lo stesso riferimento ...


0

Se sai quali riferimenti non vengono utilizzati puoi rimuoverli manualmente.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul riferimento nel nodo Riferimenti e quindi fare clic su Rimuovi.

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.