Remova as referências não utilizadas (! = “Usando”)

100

Como posso localizar e excluir referências não utilizadas em meus projetos?

Eu sei que você pode remover facilmente as instruções using no vs 2008, mas isso não remove a referência real em seus projetos. A dll referenciada ainda será copiada em seu pacote bin / setup.

Boris Callens
fonte
obrigado. Infelizmente, nenhuma resposta que eu estava procurando ...
Boris Callens
possível duplicata de Ferramentas para encontrar referências não utilizadas
David Schmitt

Respostas:

55

* Observação: consulte http://www.jetbrains.net/devnet/message/5244658 para obter outra versão desta resposta.

Lendo as postagens, parece que há alguma confusão quanto à pergunta original. Deixe-me dar uma olhada.

A postagem original está realmente fazendo a seguinte pergunta: "Como posso identificar e remover referências de um projeto do Visual Studio para outros projetos / assemblies que não estão em uso?" O pôster deseja que as montagens não apareçam mais como parte da saída de construção.

Nesse caso, o ReSharper pode ajudá-lo a identificá- los, mas você mesmo deve removê- los.

Para fazer isso, abra References no Solution Browser, clique com o botão direito do mouse em cada assembly referenciado e selecione "Find Dependent Code". Vejo:

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

Você obterá:

  1. Uma lista das dependências dessa referência em uma janela do navegador, ou

  2. Uma caixa de diálogo informando "Código dependente do módulo XXXXXXX não foi encontrado.".

Se você obtiver o segundo resultado, poderá clicar com o botão direito do mouse na Referência, selecionar Remover e removê-la de seu projeto.

Embora você tenha que fazer isso "manualmente", ou seja, uma referência por vez, ele fará o trabalho. Se alguém automatizou isso de alguma forma, estou interessado em saber como foi feito.

Você pode praticamente ignorar os do .Net Framework, já que eles normalmente não são copiados para a saída de compilação (normalmente - embora não necessariamente verdadeiro para aplicativos Silverlight).

Algumas postagens parecem responder à pergunta: "Como faço para remover cláusulas de uso (C #) de um arquivo de código-fonte que não são necessárias para resolver quaisquer referências nesse arquivo".

Nesse caso, o ReSharper ajuda de duas maneiras:

  1. Identifica cláusulas não utilizadas para você durante a detecção de erros em tempo real. Eles aparecem como Avisos de inspeção de código - o código aparecerá acinzentado (o padrão) no arquivo e o ReSharper fornecerá uma dica para removê-lo:

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

  2. Permite que você os remova automaticamente como parte do processo de limpeza do código:

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

Finalmente, perceba que o ReSharper faz análises estáticas de código em sua solução. Portanto, se você tiver uma referência dinâmica à montagem - digamos por meio de reflexão ou uma montagem que é carregada dinamicamente no tempo de execução e acessada por meio de uma interface - ela não a pegará. Não há substituto para entender sua base de código e as dependências do projeto enquanto você trabalha em seu projeto. Acho os recursos do ReSharper muito úteis.

jlo
fonte
Boa resposta extensa. O estranho é que, embora você saiba que não estou me referindo às instruções de uso (que a limpeza é padrão no VS, não entendo por que R # reinventou isso), você responde a essa pergunta primeiro. Você se importaria de trocar os dois?
Boris Callens
Vai fazer. O recurso do ReSharper precede a implementação do Visual Studio. Ele permanece como é obtido por meio de seu recurso de "autocorreção" - os Smart Tags são desligados quando você tem o ReSharper.
jlo
1
Agora, cerca de 4 anos depois, o ReSharper 6.1 obteve o recurso diretamente!
Julien Roncaglia
Não tenho certeza do que você quer dizer - o ReSharper tem esse recurso há anos.
jlo
8
ATENÇÃO: se você usar qualquer tipo de reflexão para carregar dinamicamente a partir de montagens, isso será uma coisa ruim a se fazer. Você terá usado a "referência" para transportar a montagem com você para o local de armazenamento / produção, mas não haverá nenhum código fazendo referência a ela diretamente. USE COM CUIDADO!
Casper Leon Nielsen
5

Experimente este: Assistente de Referência

Resumo

O Reference Assistant ajuda a remover referências não utilizadas de projetos C #, F #, VB.NET ou VC ++ / CLI no Visual Studio 2010.

Leniel Maccaferri
fonte
1
pode ser você conhece uma extensão semelhante para vs 2012?
isxaker
@isxaker Este agora é um recurso integrado do resharper
itslittlejohn
4

O ReSharper 6.1 incluirá estes recursos:

  • Otimize as referências : analise suas referências de montagem e seus usos no código, obtenha lista de referências redundantes e remova-as.

  • Remover referências não utilizadas : refatoração rápida para remover referências de montagem redundantes.

  • Exclusão segura em referências de montagemExclusão : excluirá referências de montagem se todas elas forem redundantes, caso contrário, exibe os usos e pode remover apenas referências de montagem redundantes da lista selecionada.

Kirill Skrygan
fonte
4

O ReSharper fará isso por você (e muito mais!)

Chris Canal
fonte
O Resharper realmente removerá a referência à DLL na pasta References? Eu não acho que isso acontece?
Tobinharris
1
Eu não acho que vai ... Acho que apenas puxa a instrução using para um namespace que você não faz referência. FWIW - Coderush oferece a mesma funcionalidade "e muito mais!" :)
Samurai Ken,
1
Agora, cerca de 4 anos depois, o ReSharper 6.1 tem o recurso!
Julien Roncaglia
3

Eu fiz isso sem extensão no VS 2010 Ultimate Architecture-> Generate Dependency Graph-> By Assembly, ele mostra assemblies usados ​​e referências não usadas removidas manualmente.

mes
fonte
Eu não recomendo isso para um projeto maior. Achei muito difícil discernir o que era e o que não era usado. Acontece que eu também sou daltônico, então isso provavelmente afetou a utilidade disso para mim.
DubiousPusher
2

Tenho uma resposta gratuita que funciona em qualquer versão do Visual Studio e em qualquer versão do Framework. Não remove as referências não utilizadas, mas as identifica.

Você pode usar o Telerik JustDecompile na dll do seu projeto. Basta abrir a dll em JustDecompile e Referencesverificar o que é realmente usado na dll compilada.

insira a descrição da imagem aqui

toddmo
fonte
1
Acho que é uma ótima solução! Você escreve plug-ins VS? :) ILSpy tem um plugin, e vou ver se pode ser facilmente semiautomático de alguma forma ...
Steven Coco
@StevenCoco Não faço isso há muito tempo, mas a API IDE é bastante direta, com muitos bons exemplos na internet. Boa sorte e atualize-nos com seu projeto se você o conseguir!
toddmo
0

Dado que VisualStudio (ou é msbuild?) Detecta referências não utilizadas e não as inclui no arquivo de saída, você pode escrever um script que analisa as referências fora do csproj, e compara isso com os Assemblies referenciados detectados por reflexão no saída do projeto.

Se você está motivado ...

Benjol
fonte
1
Isso nem sempre é correto. Por exemplo, se você tem a classe Foo que deriva de Bar, e você tem o membro estático Blah em Bar, e você o chama de Foo.Blah, então você tem que ter um assembly de Foo em referências para o compilador, mas não será emitido na saída, porque o membro estático está na barra. Existem mais alguns casos como este.
Ilya Ryzhenkov,
Sim, eu tinha notado alguns 'buracos' no meu script, mas nunca consegui descobrir o porquê. Obrigado pela informação.
Benjol,
0

Acho que estão copiados no bin \, porque no projeto que retirou a referência tem referência o outro projeto que tem a mesma referência ...

hdmq
fonte
0

Se você souber quais referências não são usadas, você pode removê-las manualmente.
No Gerenciador de Soluções, clique com o botão direito do mouse na referência no nó Referências e clique em Remover.

gordura
fonte