Como você pode encontrar os pacotes NuGet não utilizados em uma solução?

148

Como você pode encontrar os pacotes NuGet não utilizados em uma solução?

Eu tenho várias soluções em que há muitos pacotes instalados e um grande número é sinalizado como tendo atualizações.

No entanto, estou preocupado com a possibilidade de haver alterações nas alterações, portanto, primeiro desejo limpar removendo todos os pacotes não utilizados.

SteveC
fonte
2
Você percebe que as alterações nos pacotes que você não está usando não o afetariam de qualquer maneira ... Quanto à questão, apenas removo todos os pacotes do NuGet e adiciono novamente o que o compilador me diz.
Ohad Schneider
5
@OhadSchneider Nope ... mas o TOC em mim não quer todo o cruft dos pacotes não utilizados, por exemplo, na implantação
SteveC

Respostas:

57

O ReSharper 2016.1 possui um recurso para remover o NuGet não utilizado.

Ele pode ser executado em uma solução e em cada projeto em uma solução e faz o seguinte:

  1. Analise seu código e colete referências a assemblies.
  2. Crie o gráfico de uso do NuGet com base no uso de montagens.
  3. Pacotes sem arquivos de conteúdo, sem uso em si e sem dependências usadas são considerados não utilizados e sugeridos para remoção.

Infelizmente, isso não funciona para project.jsonprojetos ( RSRP-454515 ) e projetos principais do ASP.NET ( RSRP-459076 )

ulex
fonte
2
Eu tenho 2016.1 e o R # não está removendo referências de nuget não utilizadas. Estou usando project.json com nuget3 - isso é um problema conhecido?
Peter McEvoy
2
@PeterMcEvoy Sim, esse é um problema conhecido. Obrigado por apontar. Eu atualizei a resposta para esclarecer isso.
ulex
4
Eu devo ser cego, mas eu não estou vendo alguma maneira de realmente executar essa ferramenta
claudekennilol
14
@claudekennilol acabou de descobrir. clique direito no projeto e não há uma opção para "Referências optimizar o ..."
Matt Sanders
1
@Fractal Correct. É muito (muito) caro para usuários particulares, mas se você estiver em qualquer tipo de local de trabalho, o Resharper vale a pena pelo fluxo de trabalho muito mais rápido e limpo que você obtém, em comparação com o VS padrão.
Excluídos 05/08/19
21

Você pode usar a extensão ResolveUR do Visual Studio - Resolver referências não utilizadas

Resolva referências não utilizadas, incluindo referências de nuget nos projetos do Visual Studio 2012/2013, por meio do item de menu na solução e nos nós do projeto, janela de ferramenta Solution Explorer.

Não é uma tarefa fácil, então sugiro fazer um backup e / ou confirmar antes apenas para reverter se algo der errado.

dknaack
fonte
Este programa está muito ansioso quando se trata de excluir bibliotecas ... Tenha cuidado, ao usar um site, você notará que muitas DLLs são necessárias, mas foram perdidas. Se um pacote NuGet exigir outro, você não deve excluí-lo, mesmo que você não tenha uma forte dependência dele.
Jsgoupil
Eu usei essa ferramenta com maus resultados. Ele removeu (ou pelo menos sugeriu remover) muitas coisas que estavam realmente em uso. Houve algumas vezes em que confiei nas sugestões e tive que gastar um tempo precioso tentando recuperar o que foi removido.
JavaScript é necessário
2
[NOTA] A descrição afirma claramente:The tool is not tested to work with DotNet Web projects(Asp.Net, MVC), Windows CE, Silverlight project types. Use it at your own risk.
Korayem 30/06
Essa ferramenta é muito legal! É inteligente o suficiente para não remover NUnit.ConsoleRunner etc, mesmo que você não tem referência direta a ele em seu código
OlegI
Esta ferramenta está lenta. Eu tenho a solução com mais de 250 projetos .. Eu esperei .. e esperou .. suspiro
Piotr Kula
11

Você pode fazer isso usando o Resharper 2019.1.1.

Clique com o botão direito do mouse no projeto> Refatorar> Remover referências não utilizadas.

Se o seu projeto for pequeno, você também pode projetar> Otimizar referências usadas. . .

Uma janela se abrirá. Selecione todas as referências e remova todas elas. Em seguida, volte e adicione novamente os que lhe dão um erro de compilador.

Nick Gallimore
fonte
3
No VS.Net 2019 com Resharper, encontrei essa opção em: Gerenciador de Soluções> Referências > Otimizar referências ...
R. Schreurs
"A janela da ferramenta Otimizar referências exibe referências de montagem que não são usadas e usadas no projeto atual e mostra como exatamente as referências são usadas." blog.jetbrains.com/dotnet/2012/01/03/…
Nick Gallimore
1

Isso é trabalho manual, mas funciona.

  1. Use o ReSharper ou ferramenta de análise de código semelhante para identificar referências não utilizadas em seus projetos e desinstalar o nuget nos projetos correspondentes.

  2. Às vezes, os nugets desinstalados ainda permanecem nas listas Pacotes instalados e Atualizações na caixa de diálogo Gerenciar pacotes NuGet. Feche o Visual Studio, exclua a packagespasta, reabra a solução e restaure seus nugets.

angularsen
fonte
0

Eu não acho que exista uma maneira padrão de descobrir isso. O principal motivo é a variedade de coisas que esses pacotes podem fazer, desde referenciar um assembly até injetar código-fonte no seu projeto. Convém verificar o Nuget.Extensions . O segmento a seguir no codeplex fala sobre um relatório de auditoria de pacotes nuget.

http://nuget.codeplex.com/discussions/429694

(O NuGet foi movido do Codeplex para o GitHub. Arquivo do link acima :) https://web.archive.org/web/20171212202557/http://nuget.codeplex.com:80/discussions/429694

Nikhil Gupta
fonte