Resharper - найти все неиспользуемые классы

122

Я знаю, как найти неиспользуемые ссылки на один файл, щелкнув файл правой кнопкой мыши и выбрав параметр «Найти использование». Есть ли способ увидеть или получить список всех неиспользуемых классов или файлов в моем проекте?

Рокки Сингх
источник
2
Раньше я использовал для этого ndepend.
Cine

Ответы:

195

Сначала включите «Анализировать ошибки в решении» (щелкните правой кнопкой мыши значок Resharper в строке состояния).

Затем щелкните правой кнопкой мыши узел решения и выберите «Найти проблемы с кодом». В окне инструмента «Результаты проверки» вы можете сгруппировать по «Типу проблемы» и найти «Тип или член типа никогда не используется», чтобы получить все неиспользуемые классы (и многие другие неиспользуемые символы).

Второй вариант (после включения «Анализировать ошибки в решении») - перейти к любому неиспользуемому классу, нажать Alt + Enter, выбрать «Параметры для 'Тип или тип члена ...' проверки» | Найдите все проблемы с кодом этого типа | Полное решение.

Образец окна результатов осмотра

ulrichb
источник
41
Неиспользуемые классы / методы появляются в разделе «Тип или член типа никогда не используется» в разделе «Избыточность в объявлениях символов». Не уверен, что это связано с изменением версии, или я смотрю на это по-другому.
яростный
4
Это не вернуло неиспользуемых классов ни в одной категории с использованием Resharper 7.1 в VS2013 в Windows 8 или VS2012 в Windows 7.
Сэм Джонс,
1
По крайней мере, в ReSharper 8 вам не нужно включать «Анализировать ошибки в решении», чтобы получить результаты.
Питер ван Гинкель
3
Resharper 10: в этом отчете не отображаются неиспользуемые классы.
Обходной
1
Все еще не работает в Resharper 2018.1 :( Следуйте приведенному выше обходному пути, но если не можете легко найти неиспользуемый класс (или метод), временно создайте его, а затем выполните «Найти похожие проблемы в решении», используя его
Рэй
17

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

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 проходит через все типы внутри сборки и вслепую [на основе параметра методов] добавляет их в контейнер во время выполнения.

Вам понадобится что-то вроде плагина Agent Mulder, который обеспечивает навигацию по типам, зарегистрированным или разрешенным внутри ваших контейнеров. Это снова может визуально [возможно, время разработки] работать, но вы не будете в этом уверены, если каждый раз, когда вы удаляете неиспользуемый класс, вы запускаете все тесты внутри вашего приложения [каждый возможный уровень], чтобы быть уверенным на 80% в вашей безопасности. Мораль истории: класс может показаться не использованным для Resharper, но он может быть воскрешен при использовании внедрения зависимостей.

MHOOS
источник
3
Ну, не только DI, при любом использовании отражения это решение может потерпеть неудачу.
Mohayemin