web-dev-qa-db-fra.com

Resharper- Trouver toutes les classes inutilisées

Je sais comment trouver les références inutilisées d'un seul fichier en cliquant avec le bouton droit sur le fichier et en sélectionnant l'option "Rechercher les utilisations". Existe-t-il un moyen de voir ou d'obtenir la liste de tous les classes ou fichiers inutilisés dans mon projet?

118
Rocky Singh

Activez d'abord "Analyser les erreurs dans la solution" (cliquez avec le bouton droit sur l'icône Resharper dans la barre d'état).

Cliquez ensuite avec le bouton droit sur le nœud de la solution et sélectionnez "Rechercher les problèmes de code". Dans la fenêtre de l'outil "Résultats d'inspection", vous pouvez regrouper par "Type de problème" et rechercher "Le type ou le membre de type n'est jamais utilisé" pour obtenir toutes les classes inutilisées (et bien d'autres symboles inutilisés).

Une deuxième option (après avoir activé "Analyser les erreurs dans la solution") consiste à accéder à n'importe quelle classe inutilisée, appuyez sur Alt + Entrée, sélectionnez "Options pour l'inspection" Type ou type de membre ... "" | Trouver tous les problèmes de code de ce type | Solution complète.

Inspection results window sample

188
ulrichb

La solution de @ulrichc semble parfaite et fonctionne très bien pour les projets de petite à moyenne importance dans lesquels vous n'utilisez pas de framework Dependency Injection tel que Castle ou Ninject, mais que faire si vous utilisez DI conteneur [Castle par exemple] et vous avez quelque chose comme ceci:

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());
    }
}

Comme vous pouvez le constater, RegisterFromAssembly parcourt tous les types à l'intérieur de l'assembly et les ajoute aveuglément [en fonction du paramètre méthodes] au conteneur au moment de l'exécution.

Vous aurez besoin de quelque chose comme Agent Mulder plugin qui fournit une navigation pour les types enregistrés ou résolus à l'intérieur de vos conteneurs. Cela pourrait encore fonctionner visuellement [au moment de la conception], mais vous ne seriez pas vraiment sûr à moins que chaque fois que vous supprimez la classe inutilisée, vous exécutez tous les tests dans votre application [chaque couche possible] pour être sûr à 80% que vous êtes en sécurité. Morale de l'histoire: une classe peut sembler inutilisée pour Resharper mais elle peut être ressuscitée lorsque vous utilisez l'injection de dépendance.

17
MHOOS