Eliminar referencias no utilizadas (! = "Usar")

100

¿Cómo puedo encontrar y eliminar referencias no utilizadas en mis proyectos?

Sé que puede eliminar fácilmente las declaraciones de uso en vs 2008, pero esto no elimina la referencia real en sus proyectos. La dll a la que se hace referencia aún se copiará en su paquete bin / setup.

Boris Callens
fuente
Gracias. Lamentablemente, no hay respuesta que estaba buscando ...
Boris Callens
posible duplicado de Herramientas para encontrar referencias no utilizadas
David Schmitt

Respuestas:

55

* Nota: consulte http://www.jetbrains.net/devnet/message/5244658 para obtener otra versión de esta respuesta.

Al leer las publicaciones, parece que hay cierta confusión en cuanto a la pregunta original. Déjame intentarlo.

La publicación original realmente hace la pregunta: "¿Cómo identifico y elimino referencias de un proyecto de Visual Studio a otros proyectos / ensamblajes que no están en uso?" El cartel quiere que los ensamblajes ya no aparezcan como parte del resultado de la compilación.

En este caso, ReSharper puede ayudarlo a identificarlos , pero debe eliminarlos usted mismo.

Para hacer esto, abra Referencias en el Navegador de soluciones, haga clic con el botón derecho del mouse en cada ensamblaje referenciado y seleccione "Buscar código dependiente". Ver:

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

Obtendrá:

  1. Una lista de las dependencias de esa referencia en una ventana del navegador, o

  2. Un cuadro de diálogo que le dice "No se encontró el código dependiente del módulo XXXXXXX".

Si obtiene el segundo resultado, puede hacer clic con el botón derecho del mouse en la Referencia, seleccionar Eliminar y eliminarla de su proyecto.

Si bien tiene que hacerlo "manualmente", es decir, una referencia a la vez, hará el trabajo. Si alguien ha automatizado esto de alguna manera, me interesa saber cómo se hizo.

Puede ignorar prácticamente los que están en .Net Framework, ya que normalmente no se copian en la salida de su compilación (generalmente, aunque no necesariamente es cierto para las aplicaciones Silverlight).

Algunas publicaciones parecen responder a la pregunta: "¿Cómo elimino las cláusulas de uso (C #) de un archivo de código fuente que no son necesarias para resolver ninguna referencia dentro de ese archivo?".

En este caso, ReSharper ayuda de dos maneras:

  1. Identifica las cláusulas using no utilizadas durante la detección de errores sobre la marcha. Aparecen como advertencias de inspección de código: el código aparecerá atenuado (por defecto) en el archivo y ReSharper proporcionará una pista para eliminarlo:

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

  2. Le permite eliminarlos automáticamente como parte del proceso de limpieza de código:

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

Finalmente, tenga en cuenta que ReSharper realiza análisis de código estático en su solución. Por lo tanto, si tiene una referencia dinámica al ensamblaje, por ejemplo, a través de la reflexión o un ensamblaje que se carga dinámicamente en tiempo de ejecución y se accede a través de una interfaz, no lo detectará. No hay sustituto para comprender su base de código y las dependencias del proyecto mientras trabaja en su proyecto. Encuentro las características de ReSharper muy útiles.

jlo
fuente
Buena respuesta extensa. Lo extraño es que, aunque sabes que no me refiero a las declaraciones de uso (que la limpieza es estándar en VS, no entiendo por qué R # reinventó eso), primero respondes esa pregunta. ¿Te importaría cambiar los dos?
Boris Callens
Lo haré. La característica de ReSharper precede a la implementación de Visual Studio. Permanece como se logra a través de su función de "autocorrección": las etiquetas inteligentes se desactivan cuando tiene ReSharper.
jlo
1
Ahora, ~ 4 años después, ¡ReSharper 6.1 obtuvo la función directamente!
Julien Roncaglia
No estoy seguro de lo que quiere decir: ReSharper ha tenido esta función durante años.
2012
8
TENGA EN CUENTA: si usa cualquier tipo de reflexión para cargar dinámicamente desde ensamblajes, esto será algo malo. Habrá utilizado la "referencia" para llevar el ensamblaje al contenedor / sitio de producción, pero no habrá ningún código que haga referencia a él directamente. ¡UTILICE CON CUIDADO!
Casper Leon Nielsen
5

Prueba este: Asistente de referencia

Resumen

Reference Assistant ayuda a eliminar referencias no utilizadas de proyectos de C #, F #, VB.NET o VC ++ / CLI en Visual Studio 2010.

Leniel Maccaferri
fuente
1
¿Puede conocer una extensión similar para vs 2012?
isxaker
@isxaker Esta es ahora una función incorporada de
resharper
4

ReSharper 6.1 incluirá estas características:

  • Optimice las referencias : analice sus referencias de ensamblaje y sus usos en el código, obtenga una lista de referencias redundantes y elimínelas.

  • Eliminar referencias no utilizadas : refactorización rápida para eliminar referencias de ensamblaje redundantes.

  • Eliminación segura de referencias de ensamblado : eliminará las referencias de ensamblado si todas son redundantes; de lo contrario, disipa los usos y solo puede eliminar las referencias de ensamblaje redundantes de la lista seleccionada.

Kirill Skrygan
fuente
4

ReSharper hará esto por usted (¡y mucho más!)

Chris Canal
fuente
¿Resharper eliminará realmente la referencia a la DLL en la carpeta Referencias? No creo que haga esto.
tobinharris
1
No creo que lo haga ... Creo que simplemente tira de la instrucción using para un espacio de nombres al que no hace referencia. FWIW - Coderush ofrece la misma funcionalidad "¡y mucho más!" :)
Samurai Ken
1
Ahora, ~ 4 años después, ¡ReSharper 6.1 obtuvo la función!
Julien Roncaglia
3

Hice esto sin extensión en VS 2010 Ultimate Architecture-> Generate Dependency Graph-> By Assembly, muestra los ensamblajes usados ​​y las referencias no utilizadas eliminadas manualmente.

mes
fuente
No recomiendo esto para un proyecto más grande. Me resultó muy difícil discernir qué se usaba y qué no. Sin embargo, también soy daltónico, por lo que probablemente eso afectó la utilidad de esto para mí.
DubiousPusher
2

Tengo una respuesta gratuita que funciona en cualquier versión de Visual Studio y en cualquier versión de Framework. No elimina las referencias no utilizadas, pero las identifica.

Puede utilizar Telerik JustDecompile en su dll de proyecto. Simplemente abra el dll en JustDecompile y vaya debajo Referencespara ver qué se usa realmente en el dll compilado.

ingrese la descripción de la imagen aquí

Toddmo
fuente
1
¡Creo que es una gran solución! ¿Escribes complementos VS? :) ILSpy tiene un complemento, y voy a ver si se puede semiautomatizar fácilmente de alguna manera ...
Steven Coco
@StevenCoco No lo he hecho en mucho tiempo, pero la API IDE es bastante sencilla con muchos buenos ejemplos en Internet. ¡Buena suerte y avísanos con tu proyecto si lo logras!
toddmo
0

Dado que VisualStudio (¿o es msbuild?) Detecta referencias no utilizadas y no las incluye en el archivo de salida, puede escribir un script que analice las referencias fuera del csproj y las compare con los ensamblados referenciados detectados por reflexión en el salida del proyecto.

Si estás motivado ...

Benjol
fuente
1
Esto no siempre es correcto. Por ejemplo, si tiene la clase Foo que deriva de Bar, y tiene un miembro estático Blah en Bar, y lo llama como Foo.Blah, entonces debe tener ensamblado de Foo en las referencias para el compilador, pero no se emitirá en la salida, porque el miembro estático está en Bar. Hay algunos casos más como este.
Ilya Ryzhenkov
Sí, había notado algunos 'agujeros' en mi guión, nunca pude averiguar por qué. Gracias por la info.
Benjol
0

Creo que se copian en bin \, porque en el proyecto que eliminó la referencia hay referencia a otro proyecto que tiene la misma referencia ...

hdmq
fuente
0

Si sabe qué referencias no se utilizan, puede eliminarlas manualmente.
En el Explorador de soluciones, haga clic con el botón derecho en la referencia en el nodo Referencias y luego haga clic en Quitar.

grasa
fuente