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.