Resharper - Trouver toutes les classes inutilisées


122

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 «Rechercher les utilisations». Est-il possible de voir ou d'obtenir la liste de toutes les classes ou fichiers inutilisés de mon projet?


2
J'ai utilisé ndepend pour cela dans le passé.
Ciné

Réponses:


195

Activez d'abord "Analyser les erreurs dans la solution" (cliquez avec le bouton droit de la souris 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 type de membre 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") est d'aller dans 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.

Exemple de fenêtre de résultats d'inspection


41
Les classes / méthodes inutilisées apparaissent sous "Le type ou le membre de type n'est jamais utilisé" sous "Redondances dans les déclarations de symboles". Je ne sais pas si cela est dû à un changement de version ou je le regarde différemment.
bulltorious

4
Cela n'a renvoyé aucune classe inutilisée dans aucune catégorie à l'aide de Resharper 7.1 sur VS2013 sur Windows 8 ou VS2012 sur Windows 7.
Sam Jones

1
Au moins dans ReSharper 8, vous n'avez pas besoin d'activer «Analyser les erreurs dans la solution» pour obtenir des résultats.
Pieter van Ginkel

@SamJones: vous avez raison ... il ne renvoie pas non plus de classes inutilisées sous Resharper 8.1 ...
Revious

3
Resharper 10: ce rapport n'affiche pas les classes inutilisées. Solution de contournement: recherchez une classe inutilisée dans le code et faites "Rechercher des problèmes similaires dans la solution"
altumano

17

La solution de @ulrichc semble parfaite et fonctionne bien pour les projets petits à moyens dans lesquels vous n'utilisez aucun framework d' injection de dépendances tel que Castle 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 voir, RegisterFromAssembly passe par tous les types à l'intérieur de l'assembly et aveuglément [basé sur le paramètre de méthodes] les ajoute au conteneur au moment de l'exécution.

Vous aurez besoin de quelque chose comme le plugin Agent Mulder qui fournit une navigation pour les types enregistrés ou résolus dans vos conteneurs. Cela pourrait à nouveau fonctionner visuellement [au moment de la conception], mais vous ne seriez pas vraiment sûr à moins que chaque fois que vous supprimiez la classe inutilisée, vous exécutiez 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épendances.


3
Et bien pas seulement DI, pour toute utilisation de la réflexion, cette solution pourrait échouer.
Mohayemin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.