Resharper - Знайдіть усі невикористані класи


122

Я знаю, як знайти невикористані посилання на один файл, клацнувши правою кнопкою миші на файл та вибравши опцію «Знайти користування». Чи є спосіб я побачити або отримати список усіх невикористаних класів або файлів у своєму проекті?


2
Я раніше використовував ndepend для цього.
Cine

Відповіді:


195

Спочатку увімкніть "Аналіз помилок у вирішенні" (клацніть правою кнопкою миші на піктограмі Resharper на панелі стану).

Потім клацніть правою кнопкою миші вузол рішення та виберіть "Знайти проблеми з кодом". У вікні інструменту "Результати перевірки" ви можете згрупуватися за "Тип випуску" і шукати "Тип або член типу ніколи не використовується", щоб отримати всі невикористані класи (та багато інших невикористаних символів).

Другий варіант (після ввімкнення "Аналіз помилок у рішенні") - це перейти до будь-якого невикористаного класу, натисніть Alt + Enter, виберіть "Параметри для 'Тип або введіть член ...' перевірка" | Знайти всі проблеми такого коду | Ціле рішення.

Зразок вікна результатів перевірки


41
Невикористані класи / методи з'являються в розділі "Тип або член типу ніколи не використовується" в розділі "Надлишки в деклараціях символів". Не впевнений, чи це пов’язано зі зміною версії, чи я дивлюсь на це інакше.
буйний

4
Це не повернуло жодних невикористаних класів під будь-якими категоріями, використовуючи Resharper 7.1 в VS2013 в Windows 8 або VS2012 в Windows 7.
Сем Джонс

1
Принаймні в ReSharper 8 вам не потрібно вмикати "Аналіз помилок у вирішенні", щоб отримати результати.
Пітер ван Гінкель

@SamJones: ви маєте рацію .. він також не повертає жодних невикористаних класів під Resharper 8.1 ...
Відновлено

3
Resharper 10: Цей звіт не показує невикористані класи. Обхід: знайдіть у коді якийсь невикористаний клас та зробіть "Знайти подібні проблеми у вирішенні"
altumano

17

Рішення від @ulrichc звучить ідеально і прекрасно працює для малих та середніх вагомих проектів, у яких ви не використовуєте жодної структури введення залежностей, наприклад, Castle або Ninject, але що робити, якщо ви використовуєте контейнер DI [Замок, наприклад], і у вас є щось на зразок наступного:

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

Як ви можете бачити RegisterFromAssembly проходить всі типи всередині збірки і сліпо [на основі параметра методу] додає їх до контейнера під час виконання.

Вам знадобиться щось на зразок плагіна агента Малдера, який забезпечує навігацію для типів, зареєстрованих або вирішених усередині ваших контейнерів. Це знову-таки може візуально [час проектування можливо] спрацювати, але ви насправді не будете впевнені, якщо щоразу, коли ви видаляєте невикористаний клас, ви запускаєте всі тести всередині вашої програми [кожного можливого шару], щоб бути на 80% впевненим, що ви безпечні. Мораль розповіді: клас може звучати невикористаним для Resharper, але він може бути відроджений, коли ви використовуєте Dependency Injection.


3
Ну не тільки DI, для будь-якого використання рефлексії це рішення може вийти з ладу.
Mohayemin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.