Removendo todas as referências não utilizadas de um projeto nos projetos do Visual Studio


263

Gostaria de saber se é possível, em várias versões do Visual Studio, remover automaticamente todas as referências de um projeto que nunca foram usadas?

Na sua resposta, especifique a qual versão do VS a solução se aplica.


4
Geralmente, pergunto-se: a remoção dessas DLLs resulta em melhorias observáveis ​​no tempo de compilação ou algo mais? (Claro, além de remover dependências redundantes)
— monish001

3
existe alguma extensão gratuita semelhante para o VS2015?
— precisa

1
O projeto VB.Net o possui desde o VS 2005, mas nunca foi implementado para projetos em C # msdn.microsoft.com/en-us/library/7sfxafba
— Slai

4
Você pode votar para que esse recurso seja incluído como parte do VS (como deveria ser).
— Mike Lowery

2
@ monish001 - todo assembly e ativo aumenta a área de implantação e é outra coisa para gerenciar / manter ou ser uma fonte potencial de bugs.
— precisa saber é o seguinte

Respostas:


55

Se você tiver o Resharper (plug-in) instalado, poderá acessar um recurso que permite analisar as referências usadas via Solution Explorer> (clique com o botão direito do mouse) Referências> Otimizar referências ...

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

Este recurso não manipula corretamente:

  • Conjuntos injetados por dependência
  • Assemblies carregados dinamicamente (Assembly.LoadFile)
  • Assemblies de código nativo carregados por interoperabilidade
  • Controles ActiveX (interoperabilidade COM)
  • Outras maneiras criativas de carregar montagens

insira a descrição da imagem aqui


1
Sua última declaração "No entanto, não é perfeito, todos os assemblies que dependem de assemblies referenciados no seu projeto atual ainda serão marcados como não utilizados". na verdade não é um problema. A construção sabe copiar as referências de suas referências. Veja esta resposta: stackoverflow.com/a/2290139/26262
— Ed Greaves

Embora essa seja uma maneira viável de fazer isso, o "dentro de várias versões do Visual Studio" para mim significa não outra coisa, mas já "dentro"
— Mark Schultheiss

28

A extensão Resharper fará isso por você.

Esta extensão oferece suporte ao Visual Studio 2005 até 2017.

Embora o compilador não inclua assemblies não utilizados, o uso de instruções e referências estranhas diminui o Visual Studio e o Intellisense, pois há mais código que as ferramentas precisam considerar.


12
que se têm encontrado uma grande quantidade de referências não utilizadas em fora projeto - mas um monte deles, onde realmente em uso ... Então eu não confio ReSharper com referências
— Offler

5
ReSharper consome toneladas de memória em grandes projectos, quando há muitas referências que eventualmente Crashes VS
— Cemre

2
As edições do @eraj VS Express não são compatíveis com extensões, obtenha a edição comunitária gratuita, que suporta extensões como o ReSharper.
— Codemkeh

4
Pete, qualquer ferramenta automatizada terá a possibilidade de ultrapassar os limites. Especialmente na era das DI e PCL, as dependências que parecem não ser utilizadas podem ser necessárias, mas isso dificilmente é culpa da ferramenta. Em vez de fazer uma captura de tela, você deve usar o software de controle de versão. Um sistema moderno como o Git ou o Hg permitirá que você faça check-in com frequência localmente, para nunca perder o trabalho.
— Mathieson

2
Até onde eu sei, o Tell Resharper mostra namespaces não utilizados, não referências de montagem, o que eu acho que a pergunta "referências não utilizadas de um projeto" significa. Gostaria de encontrar o último também
— Sonic Soul

28

Você pode experimentar a extensão gratuita do VS2010: Assistente de Referência pelo grupo Lardite. Funciona perfeitamente para mim. Essa ferramenta ajuda a encontrar referências não utilizadas e permite escolher quais referências devem ser removidas.


3
Não está funcionando com o projeto MVC. É remover DLL essencial como .Helpers e .WebPage
— User.Anonymous

3
@Amit a extensão tem uma versão de trabalho para VS2012 agora
— Philipp M

Isso funciona se você seguir um truque simples: devio.wordpress.com/2014/12/03/…
— ravi punjwani

5
e para o VS2019?
— DARKGuy

21

Em um projeto do Visual Basic, há suporte para remover "Referências não utilizadas" (Projeto -> Referências -> Referências não utilizadas). Em C # não existe essa função.

A única maneira de fazer isso em um projeto C # (sem outras ferramentas) é remover possíveis assemblies não utilizados, compilar o projeto e verificar se há algum erro durante a compilação. Se nenhum erro ocorrer, você removeu um assembly não utilizado. ( Veja meu post )

Se você deseja saber qual projeto (montagem) depende de outras montagens, você pode usar o NDepend .


2
No VS 2008/2010, há uma opção de menu com o botão direito do mouse para remover ou remover e classificar os usos.
— JohnB

11
@ JohnB: Claro que você está certo, mas a pergunta dele é sobre referências (a assembléias) e não usos (de namespaces).
— Jehof 26/08/10

VS2012: menu: Projeto-> propriedades-> Referências-> Referências não utilizadas.
— LosManos 23/01

20

Para o Visual Studio 2013/2015/2017, há uma extensão que faz exatamente o que você deseja: ResolveUR . O que isso basicamente faz é:

  • referência é removida no projeto
  • projeto é compilado com msbuild
  • verifique se há erros de compilação
  • restaure as referências removidas se houver erros de compilação.

acabou de instalar para o VS 2017 Community Edt. - funciona bem até agora.
— Thomas

ele diz que há erro de compilação, mas não há nenhum erro de compilação quando eu construir para que ele não está funcionando edtion vs2015 comm
— Raghavendra

Você pode criar um problema na página do github: github.com/subatta/ResolveUR/issues
— Claudiu Constantin

5
2,5 de 5 estrelas no Visual Studio Marketplace de 52 comentários me decepcionaram um pouco
— ECH

Tentei em um projeto MVC e propõe remover várias dependências vitais como System.Web.Helpers, por isso estou relutante em deixá-lo por conta própria.
— precisa

19

Tudo que você precisa é de pedra e juntas nuas, então você pode fazê-lo como um homem das cavernas.

  1. Remova os namespaces não utilizados (para cada classe)
  2. Execute a compilação Debug
  3. Copie as referências de namespace executável e restante para o novo local
  4. Execute o executável
  5. Erro de DLL de referência ausente ocorrerá
  6. Copiar DLL necessária da pasta Debug
  7. Repita 4-6
  8. Gu Gu Ga Ga?
  9. Jogue sua pedra

Você também pode confiar em suas ferramentas de construção para informar qual referência ainda é necessária. É a era do VS 2017, o homem das cavernas ainda sobreviveu.


Haha, bem, nada de errado com um pouco de humor aqui. A abordagem Stoneman, de fato, parece que sem a edição Enterprise dispendiosa é o que temos agora.
— Nicholas Petersen

16

Para quem vem aqui procurando pelo Visual studio 2012 :

Baixe e instale o Assistente de Referência para o Visual Studio 11

Mais tarde você pode fazer:

insira a descrição da imagem aqui


1
O Assistente de Referência para o Visual Studio 11 parece impreciso; ele me mostrou várias referências não usadas que eu sabia que estavam sendo usadas (instaladas pelo Nuget).
— Bill Yang

1
Não está funcionando com o projeto MVC. É remover DLL essencial como .Helpers e .WebPage
— User.Anonymous

Sim, isso voltou a me morder na bunda usando um programa WPF C #.
— Charles Clayton

Não é uma opção no VS2017
— Nathan

1
Não existe no VS2019 quer
— Vin Shahrdar

15

Com as versões do Visual Studio 2017 e 2015, você pode fazer isso com o recurso Code Map , mas esse recurso está disponível apenas na Enterprise Edition , não nas versões Community ou Professional .

Clique com o botão direito do mouse no nó do projeto no gerenciador de soluções e selecione 'Mostrar no mapa de códigos'. Isso exibirá seu .dll como um único nó em um gráfico em branco. Clique com o botão direito do mouse nesse nó no Mapa de Código e selecione "Mostrar Assemblies This References". Isso adicionará um nó adicional chamado "Externals", que pode ser expandido para mostrar apenas os assemblies que são realmente referenciados.

insira a descrição da imagem aqui


1
Se você possui a edição Enterprise e não vê essa opção no menu de contexto, é necessário instalar o recurso "Mapa de Código" no instalador do VS no painel Componentes Individuais.
— precisa saber é o seguinte

Essa é boa, obrigado @Glenn. Eu só quero dizer que tive o Micosoft.Office.Interop.Excel em uso e não foi listado entre as outras referências, por isso ainda precisa ser um pouco cuidadoso.
— Emil Filip

14

No Visual Studio 2013, esta extensão funciona: ResolveUR


15
@abarisone Sua resposta genérica "não use um link como resposta" só deve ser usada APÓS você ter realmente procurado a resposta. O link é a única coisa que é relevante para esta resposta. É um link para um plug-in do VS, portanto, não há mais nada relevante para incluir.
— Charles Boyung 19/10/19

Eu concordo com Charles. Parece abuso de moderação do @abarisone. Essa resposta realmente me ajudou a economizar tempo e eu teria odiado se algum mods abusasse de seus poderes para excluí-lo.
— Zun

@Zun Antes de mais nada, nunca fui um moderador ou afirmei ser. Minha intenção era pedir mais informações sobre a extensão. Pode ter sido superficial ao meu lado, mas eu certamente não pretendia cometer um abuso.
— abarisone

12

Algumas pessoas sugeriram o uso de uma ferramenta incrível - o Assistente de Referência para o Visual Studio . O problema é que o VS2012 é o mais recente Visual Studio suportado. Mas também há como fazê-lo funcionar no VS2013;)

E aqui está como:

1) Faça o download do Lardite.RefAssistant.11.0.vsix

2) Altere a extensão para zip: Lardite.RefAssistant.11.0.vsix->Lardite.RefAssistant.11.0.zip

3) Descompacte e abra o extension.vsixmanifestarquivo no editor de texto

4) Encontre todas as ocorrências InstallationTarget Version="[11.0,12.0)"e substitua-as por InstallationTarget Version="[11.0,12.0]"(observe o suporte de fechamento)

5) Salve o arquivo e compactar todos os arquivos para que eles estejam no nível de zip raiz

6) Altere a extensão do novo zipparavsix

7) Instale e aproveite :)

Eu testei com o VS2013, obrigado fonte para o tutorial

EDITAR Adicionar ao suporte do VS 2015 Community Edition

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

Significado dos parênteses

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.

1
Isso funciona muito bem! Parece um simples erro de digitação, em seguida, que poderia ter sido fixado anos atrás pelo autor - mas ele parece ter desaparecido, pelo menos, o site tem ...
— wexman

Não é um erro de digitação, mas a versão VS com suporte mais alto :). O desenvolvedor deve testar seu complemento a cada nova versão do VS e aumentar o número, mas por algum motivo eles não fizeram isso.
— VladL

Lembre-se de parar de copiar e colar coisas. :)
— Rikki

@RikkiRockett Você está me falando? Eu vinculei a fonte na minha resposta. Ou o que exatamente você quer dizer?
— VladL

2
Nah cara. Eu estava brincando. Apenas dizendo ao cara que colocou ")" em vez de "]" que nos fez seguir todas as suas instruções. :) Bom trabalho, apenas fiz o que você disse e tudo bem! Você acabou de me salvar um dia de luta com isso. (y)
— Rikki

7

Você pode usar a extensão do Assistente de Referência na galeria de extensões do Visual Studio.

Usado e funciona para o Visual Studio 2010.


2
Você precisa ter cuidado com os projetos da web. Ele relata DLLs usadas como "não utilizadas".
— Miro J.

Eu concordo com Miro. Tentei usar isso com meu projeto web e ele selecionou duas dúzias de referências necessárias para executar meu aplicativo web (System.Web. *, Ninject. *, EntityFramework, apenas para citar alguns).
— Denis M. Kitchen

Não está funcionando com o projeto MVC. É remover DLL essencial como .Helpers e .WebPage
— User.Anonymous


-3

O método a seguir não depende de nenhum complemento e não é muito doloroso.

Percorra cada um dos seus arquivos de origem e

  1. Selecionar tudo (Ctrl-A)
  2. Alterna a expansão do contorno (Ctrl-M, M). Isso reduzirá o arquivo para duas linhas.
  3. Clique no '+' do espaço para nome. Isso mostrará cada uma das classes do arquivo como uma única linha. Examine a contagem de referência de cada classe, procurando classes não referenciadas.
  4. Clique em cada uma das classes '' + '. Isso mostrará cada uma das funções da classe como uma única linha. Digitalize a contagem de referência de cada função, procurando funções não referenciadas.

A digitalização de cada arquivo procurando por 'referência 0' leva apenas um segundo.

A digitalização de um projeto inteiro leva apenas alguns minutos.


-11

No VB2008, funciona da seguinte maneira:

Project>Add References

Em seguida, clique na guia Recente, onde você pode ver a lista de referências usadas recentemente. Localize o que você não deseja e exclua-o. Então você fecha sem adicionar nada.


1
Este não verifica se a referência está em uso
— Xavier Poinas

-12

Para remover uma referência no Visual C # No Solution Explorer, abra o nó References no nó do projeto. Clique com o botão direito do mouse em uma referência e clique em Remover.


3
Isso não parece estar restrito a apenas não usado ou automático em operação.
— precisa saber é o seguinte

não é operação automática.
— Amir

bem tentou, mas a resposta ruim, não automática, como disse antes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.