Rimozione di tutti i riferimenti non utilizzati da un progetto nei progetti di Visual Studio


263

Mi chiedevo solo se nelle varie versioni di Visual Studio fosse possibile rimuovere automaticamente tutti i riferimenti da un progetto che non sono mai stati utilizzati?

Nella tua risposta, specifica a quale versione di VS si applica la soluzione.


4
In generale, chiedersi: la rimozione di queste DLL comporta un miglioramento osservabile nel tempo di compilazione o qualcos'altro? (Ovviamente, oltre a rimuovere le dipendenze ridondanti)
monish001

3
esiste un'estensione gratuita simile per VS2015?
George Birbilis,

1
Progetto VB.Net ce l'ha dato VS 2005, ma non è mai stato implementato per progetti C # msdn.microsoft.com/en-us/library/7sfxafba
Slai

4
Puoi votare per includere questa funzione come parte di VS (come dovrebbe essere).
Mike Lowery,

2
@ monish001 - ogni assembly e risorsa aumenta l'impronta di distribuzione ed è un'altra cosa da gestire / mantenere o essere una potenziale fonte di bug.
StingyJack,

Risposte:


55

Se hai installato Resharper (plugin), puoi accedere a una funzione che ti consente di analizzare i riferimenti usati tramite Esplora soluzioni> (clic destro) Riferimenti> Ottimizza riferimenti ...

http://www.jetbrains.com/resharper/webhelp/Refactorings__Remove_Unused_References.html

Questa funzione non gestisce correttamente:

  • Assemblee iniettate dipendenza
  • Assiemi caricati dinamicamente (Assembly.LoadFile)
  • Assiemi di codici nativi caricati tramite interop
  • Controlli ActiveX (interoperabilità COM)
  • Altri modi creativi per caricare gli assiemi

inserisci qui la descrizione dell'immagine


1
L'ultima affermazione "Tuttavia, non è perfetto, tutti gli assiemi che dipendono dagli assiemi di riferimento nel progetto corrente sono ancora contrassegnati come inutilizzati". non è in realtà un problema. La build sa copiare i riferimenti dei tuoi riferimenti. Vedi questa risposta: stackoverflow.com/a/2290139/26262
Ed Greaves,

Mentre questo è un modo praticabile per farlo, "per me all'interno di varie versioni di Visual Studio" non significa altro ma già "dentro"
Mark Schultheiss,

28

L' estensione Resharper farà questo per te.

Questa estensione supporta Visual Studio 2005 fino al 2017.

Sebbene il compilatore non includa assembly inutilizzati, istruzioni e riferimenti di utilizzo estranei rallentano Visual Studio e Intellisense, poiché c'è più codice che gli strumenti devono prendere in considerazione.


12
che uno ha trovato molti riferimenti inutilizzati nel nostro progetto - ma molti di essi erano davvero in uso ... Quindi non mi fido di Resharper con riferimenti
Offler

5
Resharper consuma tonnellate di memoria in grandi progetti quando ci sono molti riferimenti che alla fine si bloccano VS
Cemre

2
Le edizioni @eraj VS Express non supportano le estensioni, ottengono l'edizione Community gratuita, che supporta estensioni come ReSharper.
codemonkeh,

4
Pete, qualsiasi strumento automatizzato avrà la possibilità di esagerare. Soprattutto nell'era delle dipendenze DI e PCL che potrebbero sembrare non consultate potrebbe essere necessario, ma non è certo colpa dello strumento. Invece di fare uno screenshot, dovresti usare il software di controllo della versione. Un sistema moderno come Git o Hg ti consentirà di effettuare il check-in frequentemente a livello locale, in modo da non perdere mai il lavoro.
Mathieson,

2
per quanto ne so dire a Resharper mostra spazi dei nomi inutilizzati, non riferimenti di assieme che è ciò che penso significhi la domanda "riferimenti inutilizzati da un progetto". Vorrei trovare anche quest'ultimo
Sonic Soul

28

Puoi provare l'estensione VS2010 gratuita: Reference Assistant del gruppo Lardite. Funziona perfettamente per me. Questo strumento aiuta a trovare riferimenti non utilizzati e consente di scegliere quali riferimenti devono essere rimossi.


3
Non funziona con il progetto MVC. Rimuove la DLL essenziale come .Helpers e .WebPage
User

3
@Amit l'estensione ora ha una versione funzionante per VS2012
Philipp M

Funziona se segui un semplice trucco: devio.wordpress.com/2014/12/03/…
ravi punjwani

5
e per VS2019?
SCURO Acquista

21

In un progetto Visual Basic esiste il supporto per rimuovere "Riferimenti non utilizzati" (Progetto -> Riferimenti -> Riferimenti non utilizzati). In C # non esiste una tale funzione.

L'unico modo per farlo in un progetto C # (senza altri strumenti) è rimuovere eventuali assembly inutilizzati, compilare il progetto e verificare se si verificano errori durante la compilazione. Se non si verificano errori, è stato rimosso un assembly inutilizzato. ( Vedi il mio post )

Se vuoi sapere quale progetto (assieme) dipende da altri assiemi puoi usare NDepend .


2
In VS 2008/2010 è presente un'opzione di menu di scelta rapida per rimuovere o rimuovere e ordinare gli utilizzi.
Giovanni B

11
@JohnB: Certo che hai ragione, ma la sua domanda riguarda i riferimenti (alle assemblee) e non gli usi (degli spazi dei nomi).
Jehof,

VS2012: menu: Progetto-> proprietà-> Riferimenti-> Riferimenti inutilizzati.
LosManos,

20

Per Visual Studio 2013/2015/2017 esiste un'estensione che fa esattamente quello che vuoi: ResolveUR . Ciò che sostanzialmente fa è:

  • il riferimento viene rimosso nel progetto
  • il progetto è compilato con msbuild
  • verifica la presenza di errori di compilazione
  • ripristinare i riferimenti rimossi in caso di errori di compilazione.

appena installato per VS 2017 Community Edt. - funziona bene finora.
Thomas,

dice che ci sono errori di build ma non c'è errore di build quando costruisco, quindi non funziona vs2015 comm edtion
Raghavendra

È possibile creare un problema sulla pagina di github: github.com/subatta/ResolveUR/issues
Claudiu Constantin

5
2,5 stelle su 5 su Visual Studio Marketplace da 52 recensioni mi hanno scoraggiato un po '
ECH

L'ho provato su un progetto MVC e propone di rimuovere diverse dipendenze vitali come System.Web.Helpers, quindi sono riluttante a lasciarlo andare da solo.
Jahaziel,

19

Tutto ciò di cui hai bisogno è pietra e nocche nude, quindi puoi farlo come un uomo delle caverne.

  1. Rimuovi gli spazi dei nomi non utilizzati (per ogni classe)
  2. Esegui debug build
  3. Copia i tuoi riferimenti eseguibili e rimanenti nello spazio dei nomi nella nuova posizione
  4. Esegui l'eseguibile
  5. Si verificherà un errore DLL di riferimento mancante
  6. Copia la DLL richiesta dalla cartella Debug
  7. Ripeti 4-6
  8. Gu Gu Ga Ga?
  9. Lancia la tua pietra

Puoi anche fare affidamento sui tuoi strumenti di generazione per farti sapere quale riferimento è ancora richiesto. È l'era di VS 2017, l'uomo delle caverne è ancora sopravvissuto.


Ahah, beh, niente di male in questo umorismo. L'approccio di Stoneman in effetti, sembra senza spendere l'edizione Enterprise, è quello che abbiamo in questo momento.
Nicholas Petersen,

16

Per chiunque venga qui alla ricerca di Visual Studio 2012 :

Scarica e installa Assistente di riferimento per Visual Studio 11

Successivamente puoi fare:

inserisci qui la descrizione dell'immagine


1
L'assistente di riferimento per Visual Studio 11 sembra essere impreciso, mi ha mostrato un sacco di riferimenti inutilizzati che sapevo effettivamente essere utilizzato (installato tramite Nuget).
Bill Yang,

1
Non funziona con il progetto MVC. Rimuove la DLL essenziale come .Helpers e .WebPage
User.Anonym

Sì, questo è tornato a mordermi il culo usando un programma C # WPF.
Charles Clayton,

Non è un'opzione in VS2017
Nathan,

1
Non esiste nemmeno in VS2019
Vin Shahrdar,

15

Con Visual Studio versioni 2017 e 2015, puoi farlo con la funzione Mappa del codice , ma questa funzione è disponibile solo nell'edizione Enterprise , non nella Community o Professional versioni .

Fai clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e seleziona "Mostra su mappa codici". Ciò visualizzerà il tuo dll come un singolo nodo in un grafico vuoto. Fare clic con il tasto destro del mouse su quel nodo nella Mappa del codice e selezionare "Mostra assiemi questo riferimenti". Ciò aggiungerà un nodo aggiuntivo chiamato "Externals" che può essere espanso per mostrare solo gli assembly a cui si fa effettivamente riferimento.

inserisci qui la descrizione dell'immagine


1
Se si dispone dell'edizione Enterprise e non si vede questa opzione nel menu di scelta rapida, è necessario installare la funzione "Mappa del codice" dal programma di installazione VS nel pannello Componenti individuali.
StingyJack,

Questo è buono, grazie @Glenn. Voglio solo dire che ho utilizzato Micosoft.Office.Interop.Excel e non è stato elencato tra gli altri riferimenti, quindi devo essere ancora un po 'attento.
Emil Filip,

14

In Visual Studio 2013 questa estensione funziona: ResolveUR


15
@abarisone La tua risposta generica "non utilizzare un collegamento come risposta" dovrebbe essere utilizzata solo DOPO che hai effettivamente CERCATO la risposta. Il collegamento è l'unica cosa che È rilevante per questa risposta. È un collegamento a un plugin VS, quindi non c'è nient'altro rilevante da includere.
Charles Boyung,

Sono d'accordo con Charles. Sembra un abuso di moderazione da parte di @abarisone. Questa risposta mi ha davvero aiutato a risparmiare un po 'di tempo e l'avrei odiata se qualche mod avesse abusato dei loro poteri per eliminarla.
Zun,

@Zun Prima di tutto non sono mai stato un moderatore o affermato di esserlo. Il mio intento era di chiedere maggiori informazioni sull'estensione. Potrebbe essere stato superficiale al mio fianco, ma sicuramente non intendevo commettere un abuso.
Abarisone,

12

Alcune persone hanno suggerito di utilizzare uno strumento fantastico: Assistente di riferimento per Visual Studio . Il problema è che VS2012 è l'ultimo Visual Studio supportato. Ma c'è un modo per farlo funzionare anche in VS2013;)

Ed ecco come:

1) Scarica Lardite.RefAssistant.11.0.vsix

2) Cambia l'estensione in zip: Lardite.RefAssistant.11.0.vsix ->Lardite.RefAssistant.11.0.zip

3) Decomprimere e aprire il extension.vsixmanifest file nell'editor di testo

4) Trova tutte le occorrenze di InstallationTarget Version="[11.0,12.0)"e sostituiscile conInstallationTarget Version="[11.0,12.0]" (nota la parentesi quadra di chiusura)

5) Salvare il file e comprimere tutti i file in modo che siano a livello di zip principale

6) Cambia l'estensione del nuovo zipinvsix

7) Installa e divertiti :)

L'ho provato con VS2013, grazie alla fonte per il tutorial

MODIFICA Aggiungi per supportare VS 2015 Community Edition

<InstallationTarget Version="[14.0,15.0]" Id="Microsoft.VisualStudio.Community" />

Significato delle parentesi

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.

1
Funziona benissimo! Sembra un semplice errore di battitura che avrebbe potuto essere risolto anni fa dall'autore - ma sembra che sia scomparso, almeno il sito web ha ...
wexman,

Non è un errore di battitura, ma la versione VS supportata più alta :). Lo sviluppatore dovrebbe testare il suo componente aggiuntivo con ogni nuova versione di VS e incrementare il numero, ma per qualche motivo non lo ha fatto.
VladL

Ricorda di interrompere le operazioni di "copia e incolla". :)
Rikki,

@RikkiRockett Mi stai rivolgendo a me? Ho collegato la fonte nella mia risposta. O cosa intendi esattamente?
VladL,

2
Nah amico. Stavo scherzando. Dico solo al tipo che ha messo ")" invece di "]" che ci ha fatto seguire tutte le tue istruzioni. :) Bel lavoro però, ho appena fatto quello che hai detto e tutto bene! Mi hai appena salvato un giorno di difficoltà con questo. (y)
Rikki,

7

È possibile utilizzare l' estensione Assistente di riferimento dalla galleria di estensioni di Visual Studio.

Utilizzato e funziona per Visual Studio 2010.


2
Devi stare attento con i progetti web. Segnala le DLL utilizzate come "non utilizzate".
Miro J.,

Sono d'accordo con Miro. Ho provato a usarlo con il mio progetto Web e ho selezionato due dozzine di riferimenti necessari per eseguire la mia applicazione Web (System.Web. *, Ninject. *, EntityFramework, solo per citarne alcuni).
Denis M. Kitchen

Non funziona con il progetto MVC. Rimuove la DLL essenziale come .Helpers e .WebPage
User.Anonym


-3

Il seguente metodo non dipende da alcun 'componente aggiuntivo e non è molto doloroso.

Passa attraverso ciascuno dei tuoi file sorgente e

  1. Seleziona tutto (Ctrl-A)
  2. Attiva / disattiva l'espansione del contorno (Ctrl-M, M). Ciò ridurrà il file a due righe.
  3. Fai clic sul '+' dello spazio dei nomi. Questo mostrerà ciascuna delle classi del file come una singola riga. Esegui la scansione del conteggio dei riferimenti di ogni classe, cercando le classi senza riferimento.
  4. Fai clic su ciascuna delle classi '' + '. Questo mostrerà ciascuna delle funzioni di classe come una singola riga. Scansiona il conteggio dei riferimenti di ciascuna funzione, cercando le funzioni senza riferimento.

La scansione di ogni file in cerca di "riferimento 0" richiede solo un secondo.

La scansione di un intero progetto richiede solo un paio di minuti.


-11

In VB2008 funziona in questo modo:

Project>Add References

Quindi fare clic sulla scheda Recenti in cui è possibile visualizzare l'elenco dei riferimenti utilizzati di recente. Individua quello che non vuoi ed eliminalo. Quindi chiudi senza aggiungere nulla.


1
Questo non controlla se il riferimento è in uso
Xavier Poinas,

-12

Per rimuovere un riferimento in Visual C # In Esplora soluzioni, aprire il nodo Riferimenti sotto il nodo del progetto. Fare clic con il tasto destro del mouse su un riferimento e fare clic su Rimuovi.


3
Ciò non sembra essere limitato al solo inutilizzato o automatico in funzione.
Nathan Tuggy,

non è un'operazione automatica.
Amir,

ben provato, ma cattiva risposta, non automatico come detto prima
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.