Resharper- Encuentra todas las clases no utilizadas

122

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

Rocky Singh
fuente
2
He usado ndepend para esto en el pasado.
Cine

Respuestas:

195

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

Luego haga clic derecho en el nodo de la 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 "El tipo o miembro de tipo 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 + Intro, seleccionar "Opciones para 'Tipo o tipo miembro ...' inspección" | Encuentre todos los problemas de código de este tipo | Solución completa

Muestra de ventana de resultados de inspección

ulrichb
fuente
41
Las clases / métodos no utilizados aparecen en "Tipo o miembro de tipo nunca se usa" en "Redundancias en las declaraciones de símbolos". No estoy seguro si esto se debe a un cambio de versión, o lo estoy viendo de manera diferente.
tormentoso
44
Esto no ha devuelto ninguna clase no utilizada en ninguna categoría usando Resharper 7.1 en VS2013 en Windows 8 o VS2012 en Windows 7.
Sam Jones
1
Al menos en ReSharper 8, no tiene que habilitar "Analizar errores en la solución" para obtener resultados.
Pieter van Ginkel
@SamJones: tienes razón ... no devuelve ninguna clase no utilizada en Resharper 8.1 también ...
Anterior
3
Resharper 10: este informe no muestra las clases no utilizadas. Solución alternativa: encuentre una clase no utilizada en el código y haga "Buscar problemas similares en la solución"
altumano
17

La solución de @ulrichc suena perfecta y funciona bien para proyectos pequeños a medianos en los que no está utilizando ningún marco de inyección de dependencias como Castle o Ninject, pero ¿qué sucede si está utilizando el contenedor DI [Castle, por ejemplo] y 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 puede ver, RegisterFromAssembly revisa todos los tipos dentro del ensamblaje y ciegamente [según el parámetro de métodos] los agrega al contenedor en tiempo de ejecución.

Necesitará algo como el complemento Agente Mulder que proporciona navegación para los tipos registrados o resueltos dentro de sus contenedores. Esto nuevamente podría funcionar visualmente [posiblemente en el tiempo de diseño] pero no estaría realmente seguro a menos que cada vez que elimine la clase no utilizada ejecute todas las pruebas dentro de su aplicación [cada capa posible] para estar 80% seguro de que está seguro. Moraleja de la historia: una clase puede sonar no utilizada para Resharper, pero puede resucitar cuando usas la inyección de dependencia.

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