119 votes

Resharper- Trouver toutes les classes inutilisées

Je sais comment trouver les références inutilisées d'un seul fichier en faisant un clic droit sur le fichier et en sélectionnant l'option "Find Usages". Y a-t-il un moyen de voir ou d'obtenir la liste des références inutilisées d'un fichier ? tous les classes ou fichiers inutilisés dans mon projet ?

192voto

ulrichb Points 8512

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

Ensuite, faites un clic droit sur le nœud de la solution et sélectionnez "Find Code issues". Dans la fenêtre de l'outil "Résultats d'inspection", vous pouvez regrouper par "Type de problème" et rechercher "Type ou membre de type n'est jamais utilisé" pour obtenir toutes les classes inutilisées (et beaucoup plus de symboles inutilisés).

Une deuxième option (après avoir activé l'option "Analyser les erreurs dans la solution") est d'aller dans n'importe quelle classe inutilisée, d'appuyer sur Alt+Entrée, de sélectionner "Options pour l'inspection 'Type ou type de membre ...'" | Trouver tous les problèmes de code de ce type | Solution entière.

Inspection results window sample

17voto

MHOOS Points 1420

La solution proposée par @ulrichc semble parfaite et fonctionne parfaitement pour les projets de petite ou moyenne envergure dans lesquels vous n'utilisez pas d'outils de gestion de la qualité. Injection de dépendances comme Château ou Ninject mais que se passe-t-il si vous utilisez un conteneur DI [Castle par exemple] et que vous avez quelque chose comme ce qui suit :

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 passe en revue tous les types contenus dans l'assemblage et les ajoute aveuglément [sur la base du paramètre methods] au conteneur au moment de l'exécution.

Vous aurez besoin de quelque chose comme Agent Mulder qui fournit une navigation pour les types enregistrés ou résolus dans vos conteneurs. Là encore, cela pourrait fonctionner visuellement [au moment de la conception, peut-être] mais vous n'en seriez pas vraiment sûr à moins que, chaque fois que vous supprimez la classe inutilisée, vous n'exécutiez tous les tests dans votre application [toutes les couches possibles] 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X