Eliminar todas las referencias no utilizadas de un proyecto en proyectos de Visual Studio

263

Me preguntaba si sería posible en varias versiones de Visual Studio eliminar automáticamente todas las referencias de un proyecto que nunca se utilizaron.

En su respuesta, especifique a qué versión de VS se aplica la solución.

KroaX
fuente
44
En general, me pregunto: ¿eliminar estas DLL resulta en una mejora notable en el tiempo de compilación u otra cosa? (Por supuesto, aparte de eliminar dependencias redundantes)
monish001
3
¿Hay alguna extensión gratuita similar para VS2015?
George Birbilis
1
El proyecto VB.Net lo tiene desde VS 2005, pero nunca se implementó para proyectos C # msdn.microsoft.com/en-us/library/7sfxafba
Slai
44
Puede votar para que esta característica se incluya como parte de VS (como debería ser).
Mike Lowery
2
@ monish001: cada ensamblaje y activo aumenta la huella de implementación y es otra cosa para administrar / mantener o ser una fuente potencial de errores.
StingyJack

Respuestas:

55

Si tiene instalado Resharper (complemento), puede acceder a una función que le permite analizar referencias usadas a través del Explorador de soluciones> (clic derecho) Referencias> Optimizar referencias ...

http://www.jetbrains.com/resharper/webhelp/Refactorings__Remove_Unused_References.html

Esta característica no maneja correctamente:

  • Conjuntos inyectados de dependencia
  • Ensambles cargados dinámicamente (Assembly.LoadFile)
  • Ensambles de código nativo cargados a través de interoperabilidad
  • Controles ActiveX (interoperabilidad COM)
  • Otras formas creativas de cargar ensamblajes

ingrese la descripción de la imagen aquí

Ernesto
fuente
1
Su última declaración "Sin embargo, no es perfecto, todos los ensamblajes que dependen de ensamblados referenciados en su proyecto actual todavía están marcados como no utilizados". En realidad no es un problema. La compilación sabe copiar las referencias de sus referencias. Vea esta respuesta: stackoverflow.com/a/2290139/26262
Ed Greaves el
Si bien esta es una forma viable de hacer esto, "para mí dentro de varias versiones de Visual Studio" no significa otra cosa sino ya "dentro"
Mark Schultheiss
28

La extensión Resharper lo hará por usted.

Esta extensión es compatible con Visual Studio 2005 hasta 2017.

Si bien el compilador no incluirá ensamblajes no utilizados, las declaraciones y referencias de uso extraño ralentizan Visual Studio e Intellisense, ya que hay más código que las herramientas deben tener en cuenta.

Mathieson
fuente
12
ese ha encontrado muchas referencias no utilizadas en nuestro proyecto, pero muchas de ellas estaban realmente en uso ... Así que no confío en Resharper con referencias
Offler
55
Resharper consume toneladas de memoria en grandes proyectos cuando hay muchas referencias que finalmente
chocan
2
Las ediciones @eraj VS Express no admiten extensiones, obtenga la edición comunitaria gratuita, que admite extensiones como ReSharper.
codemonkeh
44
Pete, cualquier herramienta automatizada tendrá la posibilidad de extralimitarse. Especialmente en la era de las dependencias DI y PCL que parecen no ser utilizadas, puede ser necesario, pero eso no es culpa de la herramienta. En lugar de hacer una captura de pantalla, debería usar un software de control de versiones. Un sistema moderno como Git o Hg le permitirá registrarse con frecuencia localmente, para que nunca pierda el trabajo.
Mathieson
2
Por lo que puedo decir, Resharper muestra espacios de nombres no utilizados, no referencias de ensamblaje, que es lo que creo que significa la pregunta "referencias no utilizadas de un proyecto". Me gustaría encontrar este último también
Sonic Soul
28

Puede probar la extensión gratuita VS2010: Asistente de referencia del grupo Lardite. Funciona perfectamente para mí. Esta herramienta ayuda a encontrar referencias no utilizadas y le permite elegir qué referencias deben eliminarse.

Chiflado
fuente
3
No funciona con el proyecto MVC. Elimina DLL esenciales como .Helpers y .WebPage
User.Anonymous
3
@Amit la extensión tiene una versión funcional para VS2012 ahora
Philipp M
Eso funciona si sigues un truco simple: devio.wordpress.com/2014/12/03/…
ravi punjwani
55
y para VS2019?
DARKGuy
21

En un proyecto de Visual Basic hay soporte para eliminar "Referencias no utilizadas" (Proyecto -> Referencias -> Referencias no utilizadas). En C # no existe tal función.

La única forma de hacerlo en un proyecto de C # (sin otras herramientas) es eliminar los posibles ensamblajes no utilizados, compilar el proyecto y verificar si se produce algún error durante la compilación. Si no se produce ningún error, ha eliminado un ensamblaje no utilizado. ( Ver mi publicación )

Si desea saber qué proyecto (ensamblaje) depende de otros ensamblajes, puede usar NDepend .

Jehof
fuente
2
En VS 2008/2010 hay una opción de menú de clic derecho para eliminar o eliminar y ordenar los usos.
JohnB
11
@JohnB: Por supuesto que tienes razón, pero su pregunta es sobre referencias (a ensamblajes) y no sobre usos (de espacios de nombres).
Jehof
VS2012: menú: Proyecto-> propiedades-> Referencias-> Referencias no utilizadas.
LosManos
20

Para Visual Studio 2013/2015/2017 hay una extensión que hace exactamente lo que desea: ResolveUR . Lo que esto básicamente hace es:

  • la referencia se elimina en el proyecto
  • el proyecto se compila con msbuild
  • verificar errores de compilación
  • restaurar referencias eliminadas si hubo errores de compilación.
Claudiu Constantin
fuente
acaba de instalarlo para VS 2017 Community Edt. - Funciona bien hasta ahora.
Thomas
dice que hay un error de compilación pero no hay un error de compilación cuando construyo, por lo que no funciona vs2015 comm edtion
Raghavendra
Puede crear un problema en la página de github
Claudiu Constantin
55
2.5 de 5 estrellas en Visual Studio Marketplace de 52 comentarios me desanimaron un poco
ECH
Lo probé en un proyecto MVC y propone eliminar varias dependencias vitales como System.Web.Helpers, así que soy reacio a dejarlo ir solo.
Jahaziel
19

Todo lo que necesitas es piedra y nudillos desnudos, entonces puedes hacerlo como un hombre de las cavernas.

  1. Eliminar espacios de nombres no utilizados (para cada clase)
  2. Ejecutar depuración de compilación
  3. Copie sus referencias de espacio de nombres ejecutables y restantes a una nueva ubicación
  4. Ejecuta el ejecutable
  5. Se producirá un error de DLL de referencia faltante
  6. Copie la DLL requerida de la carpeta de depuración
  7. Repita 4-6
  8. Gu Gu Ga Ga?
  9. Tira tu piedra

También puede confiar en sus herramientas de compilación para que sepa qué referencia aún se necesita. Es la era de VS 2017, el hombre de las cavernas aún sobrevivió.

Eark
fuente
Jaja, bueno, nada de malo con un poco de humor aquí. De hecho, el enfoque de Stoneman parece que sin la edición Enterprise de Spendy es lo que tenemos ahora.
Nicholas Petersen
16

Para cualquiera que venga en busca de Visual Studio 2012 :

Descargue e instale el Asistente de referencia para Visual Studio 11

Más tarde puedes hacer:

ingrese la descripción de la imagen aquí

Habib
fuente
1
El Asistente de referencia para Visual Studio 11 parece ser inexacto, me mostró un montón de referencias no utilizadas que sabía que realmente se estaban utilizando (instaladas a través de Nuget).
Bill Yang
1
No funciona con el proyecto MVC. Elimina DLL esenciales como .Helpers y .WebPage
User.Anonymous el
Sí, esto volvió a morderme el culo usando un programa WPF C #.
Charles Clayton
No es una opción en VS2017
Nathan
1
Tampoco existe en VS2019
Vin Shahrdar
15

Con las versiones de Visual Studio 2017 y 2015, puede hacer esto con la función Mapa de código , pero esta función solo está disponible en la Edición Enterprise , no en las versiones Comunidad o Profesional .

Haga clic derecho en el nodo del proyecto en el explorador de soluciones y seleccione 'Mostrar en el mapa de código'. Esto mostrará su .dll como un solo nodo en un gráfico en blanco. Haga clic derecho en ese nodo en el Mapa de código y seleccione "Mostrar ensamblados estas referencias". Esto agregará un nodo adicional llamado "Externos" que se puede expandir para mostrar solo los ensamblados a los que realmente se hace referencia.

ingrese la descripción de la imagen aquí

Glenn Slayden
fuente
1
Si tiene la edición Enterprise y no ve esta opción en el menú contextual, debe instalar la función "Mapa de código" desde el instalador VS en el panel Componentes individuales.
StingyJack
Esta es buena, gracias @Glenn. Solo quiero decir que he tenido Micosoft.Office.Interop.Excel en uso y no figuraba entre las otras referencias, por lo que aún tengo que ser un poco cuidadoso.
Emil Filip
14

En Visual Studio 2013 esta extensión funciona: ResolveUR

Falla general
fuente
15
@abarisone Su respuesta genérica "no use un enlace como respuesta" en realidad solo debe usarse DESPUÉS de que haya BUSCADO la respuesta. El enlace es lo único que ES relevante para esta respuesta. Es un enlace a un complemento VS, por lo que no hay nada más relevante que incluir.
Charles Boyung
Estoy de acuerdo con Charles Esto parece abuso de moderación de @abarisone. Esta respuesta realmente me ayudó a ahorrar algo de tiempo y lo hubiera odiado si algún mod abusase de sus poderes para eliminarlo.
Zun
@Zun Antes que nada, nunca he sido moderador o he afirmado serlo. Mi intención era pedir más información sobre la extensión. Puede haber sido superficial a mi lado, pero seguramente no quise cometer un abuso.
abarisone
12

Algunas personas sugirieron usar una herramienta increíble: el Asistente de referencia para Visual Studio . El problema es que VS2012 es el último Visual Studio compatible. Pero también existe la manera de hacerlo funcionar en VS2013;)

Y así es como:

1) Descargar Lardite.RefAssistant.11.0.vsix

2) Cambie la extensión a zip: Lardite.RefAssistant.11.0.vsix->Lardite.RefAssistant.11.0.zip

3) Descomprima y abra el extension.vsixmanifestarchivo en el editor de texto

4) Encuentra todas las ocurrencias InstallationTarget Version="[11.0,12.0)"y reemplázalas conInstallationTarget Version="[11.0,12.0]" (observe el soporte de cierre)

5) Guarde el archivo y comprima todos los archivos para que estén en el nivel zip raíz

6) Cambie la extensión de lo nuevo zipavsix

7) Instalar y disfrutar :)

Lo probé con VS2013, gracias a la fuente del tutorial

EDITAR Agregar para admitir VS 2015 Community Edition

<InstallationTarget Version="[14.0,15.0]" Id="Microsoft.VisualStudio.Community" />

Significado de los corchetes

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.
VladL
fuente
1
¡Esto funciona bien! Parece un error tipográfico simple que podría haber sido reparado hace años por el autor, pero parece haber desaparecido, al menos el sitio web ha ...
wexman
No es un error tipográfico, sino la versión VS más alta compatible :). Se supone que el desarrollador debe probar su complemento con cada nueva versión de VS e incrementar el número, pero por alguna razón no lo hicieron.
VladL
Recuerde dejar de "copiar y pegar" cosas. :)
Rikki
@RikkiRockett ¿Te diriges a mí? He vinculado la fuente en mi respuesta. ¿O a qué te refieres exactamente?
VladL
2
No hombre. Estaba bromeando Solo digo al tipo que puso ")" en lugar de "]" que nos hizo seguir todas sus instrucciones. :) Buen trabajo, ¡acabo de hacer lo que dijiste y todo bien! Me acabas de salvar un día de lucha con esto. (y)
Rikki
7

Puede usar la extensión del Asistente de referencia desde la galería de extensiones de Visual Studio.

Usado y funciona para Visual Studio 2010.

eka808
fuente
2
Debes tener cuidado con los proyectos web. Informa sobre las DLL que se usan como "sin usar".
Miro J.
Estoy de acuerdo con Miro. Traté de usar esto con mi proyecto web y seleccionó dos docenas de referencias necesarias para ejecutar mi aplicación web (System.Web. *, Ninject. *, EntityFramework, solo por nombrar algunas).
Denis M. Kitchen
No funciona con el proyecto MVC. Elimina DLL esenciales como .Helpers y .WebPage
User.Anonymous el
1

Usando DevExpress, sigo estas instrucciones:

  1. En VS, vaya a DevExpress - Editor - Code Cleanup. En Reglas, marque 'Eliminar referencias de espacio de nombres no utilizadas'. Haga clic en Aceptar.
  2. Haga clic con el botón derecho en la solución y elija 'Limpieza de código'. La limpieza dura unos minutos y termina.
  3. Construye tu aplicación
Soluciones IndieTech
fuente
-3

El siguiente método no depende de ningún "complemento" y no es muy doloroso.

Revise cada uno de sus archivos fuente y

  1. Seleccionar todo (Ctrl-A)
  2. Alternar expansión de contorno (Ctrl-M, M). Esto reducirá el archivo a dos líneas.
  3. Haga clic en el espacio de nombres '+'. Esto mostrará cada una de las clases del archivo como una sola línea. Escanee el recuento de referencias de cada clase, buscando clases sin referencia.
  4. Haga clic en cada una de las clases '' + '. Esto mostrará cada una de las funciones de clase como una sola línea. Escanee el recuento de referencia de cada función, buscando funciones sin referencia.

Escanear cada archivo en busca de 'referencia 0' toma solo un segundo.

Escanear un proyecto completo lleva solo un par de minutos.

NoBrassRing
fuente
-11

En VB2008, funciona de esta manera:

Project>Add References

Luego haga clic en la pestaña Reciente donde puede ver la lista de referencias utilizadas recientemente. Localice el que no desea y elimínelo. Luego cierras sin agregar nada.

codelearner
fuente
1
Esto no verifica si la referencia está en uso
Xavier Poinas
-12

Para eliminar una referencia en Visual C # en el Explorador de soluciones, abra el nodo Referencias debajo del nodo del proyecto. Haga clic con el botón derecho en una referencia y haga clic en Eliminar.

Halit Can
fuente
3
Esto no parece estar limitado a solo no utilizado o automático en operación.
Nathan Tuggy
No es una operación automática.
Amir
así lo intentó, pero mala respuesta, no es automático como se dijo antes