2011-01-10 26 views
107

Sé cómo encontrar las referencias no utilizadas de un solo archivo haciendo clic derecho en el archivo y seleccionando la opción "Buscar usos". ¿Hay alguna manera de que pueda ver u obtener la lista de todos las clases o archivos no utilizados en mi proyecto?Resharper- Encuentra todas las clases no utilizadas

+2

He usado ndepend para esto en el pasado. – Cine

Respuesta

167

Primero habilite "Analizar errores en la solución" (haga clic derecho en el ícono de Resharper en la barra de estado).

A continuación, haga clic con el botón derecho en el nodo de solución y seleccione "Buscar problemas de código". En la ventana de la herramienta "Resultados de la inspección" puede agrupar por "Tipo de problema" y buscar "Tipo o tipo de miembro nunca se usa" para obtener todas las clases no utilizadas (y muchos más símbolos no utilizados).

Una segunda opción (después de habilitar "Analizar errores en la solución") es ir a cualquier clase no utilizada, presionar Alt + Enter, seleccionar "Opciones para" Escriba o escriba miembro ... 'inspection' | Buscar todos los problemas de código de este tipo | Solución completa

Inspection results window sample

+40

Las clases/métodos no utilizados aparecen en "El tipo o el tipo de miembro nunca se usa" en "Redundancias en las declaraciones de símbolos". No estoy seguro de si esto se debe a un cambio de versión, o si lo estoy viendo de manera diferente. – bulltorious

+4

Esto no ha devuelto ninguna clase no utilizada bajo ninguna categoría usando Resharper 7.1 en VS2013 en Windows 8 o VS2012 en Windows 7. –

+1

Al menos en ReSharper 8, no tiene que habilitar "Analizar errores en solución" para obtener resultados. –

17

solución por @ulrichc suena perfecto y funciona bien para pequeñas y proyectos de peso medio en el que no esté utilizando cualquier Dependency Injection marco como Castle o Ninject pero lo que si está utilizando contenedor DI [Castillo por ejemplo] y usted tiene algo como lo siguiente:

public class IoC 
{ 
    private WindsorContainer _container; 

    private IoC() 
    { 
     _container = new WindsorContainer(); 
    } 

    public static void RegisterFromAssembly(Assembly assembly, string classEndsWith, LifeTime lifeTime) 
    { 
     var lifestyle = ConvertLifeStyleType(lifeTime); 

     _container.Register(AllTypes.FromAssembly(assembly) 
        .Where(type => type.Name.EndsWith(classEndsWith)) 
        .WithService.AllInterfaces() 
        .Configure(c => c.LifeStyle.Is(lifestyle)) 
        .WithService.FirstInterface()); 
    } 
} 

como se puede ver RegisterFromAssembly pasa a través de todos los tipos dentro del montaje y ciegamente [basado en el parámetro métodos] los añade al contenedor en tiempo de ejecución.

Necesitará algo como el complemento Agent Mulder que proporciona la navegación para los tipos registrados o resueltos dentro de sus contenedores. De nuevo, esto podría funcionar visualmente [el tiempo de diseño, posiblemente], pero no estarías seguro a menos que cada vez que elimines la clase no utilizada ejecutes todas las pruebas dentro de tu aplicación [todas las capas posibles] para estar 80% seguro de que estás a salvo. Moraleja de la historia: una clase puede sonar inutilizada para Resharper, pero podría resucitarse cuando use Dependency Injection.

+1

Bueno, no solo DI, para cualquier uso de la reflexión, esa solución podría fallar. – Mohayemin

Cuestiones relacionadas