¿Cómo puede encontrar los paquetes NuGet no utilizados en una solución?

148

¿Cómo puede encontrar los paquetes NuGet no utilizados en una solución?

Tengo una serie de soluciones en las que hay muchos paquetes instalados, y un gran número está marcado como actualizaciones.

Sin embargo, me preocupa que pueda haber cambios importantes, por lo que primero quiero limpiar eliminando los paquetes no utilizados.

SteveC
fuente
2
Te das cuenta de que romper los cambios en los paquetes que no estás usando no te afectaría de todos modos ... En cuanto a la pregunta, simplemente elimino todos los paquetes NuGet y vuelvo a agregar lo que me dice el compilador.
Ohad Schneider
55
@OhadSchneider Nope ... pero el TOC en mí no quiere todo el contenido de los paquetes no utilizados, por ejemplo, en el despliegue
SteveC

Respuestas:

57

ReSharper 2016.1 tiene una función para eliminar NuGet no utilizado.

Se puede ejecutar en una solución y en cada proyecto en una solución y hace lo siguiente:

  1. Analice su código y recopile referencias a ensamblajes.
  2. Cree un gráfico de uso de NuGet basado en el uso de ensamblajes.
  3. Los paquetes sin archivos de contenido, sin usar y sin dependencias usadas se asumen como no utilizados y se sugiere eliminarlos.

Desafortunadamente, esto no funciona para project.jsonproyectos ( RSRP-454515 ) y proyectos centrales de ASP.NET ( RSRP-459076 )

ulex
fuente
2
Tengo 2016.1 y R # no está eliminando referencias nuget no utilizadas. Estoy usando project.json con nuget3. ¿Es un problema conocido?
Peter McEvoy
2
@PeterMcEvoy Sí, este es un problema conocido. Gracias por señalarlo. He actualizado la respuesta para aclarar eso.
ulex
44
Debo ser ciego, pero no veo ninguna manera de ejecutar esta herramienta
Claudekennilol
14
@claudekennilol acaba de descubrirlo. haga clic derecho en el proyecto y hay una opción para "Optimizar referencias ..."
Matt Sanders
1
@Fractal Correcto. Es muy (demasiado) costoso para los usuarios privados, pero si estás en cualquier tipo de lugar de trabajo, entonces Resharper vale la pena por el flujo de trabajo mucho más rápido y limpio que obtienes, en comparación con el VS predeterminado.
Excludos
21

Puede usar la extensión de Visual Studio ResolveUR - Resolver referencias no utilizadas

Resuelva las referencias no utilizadas, incluidas las referencias nuget en los proyectos de Visual Studio 2012/2013 a través del elemento de menú en la solución y los nodos de proyecto Ventana de la herramienta Explorador de soluciones.

No es una tarea fácil, así que sugiero hacer una copia de seguridad y / o confirmar antes solo para revertir si algo salió mal.

dknaack
fuente
Este programa es demasiado entusiasta cuando se trata de eliminar bibliotecas ... Tenga cuidado, cuando use un sitio web, notará que se necesitan muchas DLL pero se han ido. Si un paquete NuGet requiere otro, no debe eliminarlo a pesar de que USTED no tiene una gran dependencia de él.
jsgoupil
He usado esta herramienta con malos resultados. Se eliminó (o al menos se sugirió eliminar) muchas cosas que realmente estaban en uso. Algunas veces he confiado en las sugerencias y tuve que pasar un tiempo precioso tratando de recuperar lo que se eliminó.
Ryan VandenHeuvel
2
[NOTA] LA descripción establece 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
¡Esta herramienta es realmente buena! Es lo suficientemente inteligente como para no eliminar NUnit.ConsoleRunner, etc., a pesar de que no tiene una referencia directa en su código
OlegI
Esta herramienta es lenta. Tengo solución con más de 250 proyectos ... Esperé ... y esperé ... suspiro
Piotr Kula
11

Puede lograr esto usando Resharper 2019.1.1.

Haga clic derecho en el proyecto> Refactor> Eliminar referencias no utilizadas.

Si su proyecto es pequeño, también puede proyectar> Optimizar referencias usadas. . .

Una ventana aparecerá. Seleccione todas las referencias y elimínelas todas. Luego regrese y vuelva a agregar los que le dan un error de compilación.

Nick Gallimore
fuente
3
En VS.Net 2019 con Resharper, encontré esta opción en: Explorador de soluciones> Referencias > Optimizar referencias ...
R. Schreurs
"La ventana de la herramienta Optimizar referencias muestra referencias de ensamblaje que no se utilizan y se usan en el proyecto actual, y muestra cómo se usan exactamente las referencias". blog.jetbrains.com/dotnet/2012/01/03/…
Nick Gallimore
1

Esto es trabajo manual, pero funciona.

  1. Use ReSharper o una herramienta de análisis de código similar para identificar cualquier referencia no utilizada en sus proyectos y desinstale el nuget en los proyectos correspondientes.

  2. A veces, los nugets desinstalados aún permanecen en los paquetes instalados y las listas de actualizaciones en el cuadro de diálogo Administrar paquetes NuGet. Cierre Visual Studio, luego elimine la packagescarpeta, luego vuelva a abrir la solución y restaure sus nugets.

angularsen
fuente
0

No creo que haya una forma predeterminada de averiguarlo. La razón principal es la variedad de cosas que estos paquetes pueden hacer, desde hacer referencia a un ensamblaje hasta inyectar código fuente a su proyecto. Sin embargo, es posible que desee consultar Nuget.Extensions . El siguiente hilo en codeplex habla sobre un informe de auditoría de paquetes nuget.

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

(NuGet se ha movido de Codeplex a GitHub. Archivo del enlace anterior :) https://web.archive.org/web/20171212202557/http://nuget.codeplex.com:80/discussions/429694

Nikhil Gupta
fuente