Я знаю, как найти неиспользуемые ссылки на один файл, щелкнув файл правой кнопкой мыши и выбрав параметр «Найти использование». Есть ли способ увидеть или получить список всех неиспользуемых классов или файлов в моем проекте?
Я знаю, как найти неиспользуемые ссылки на один файл, щелкнув файл правой кнопкой мыши и выбрав параметр «Найти использование». Есть ли способ увидеть или получить список всех неиспользуемых классов или файлов в моем проекте?
Ответы:
Сначала включите «Анализировать ошибки в решении» (щелкните правой кнопкой мыши значок Resharper в строке состояния).
Затем щелкните правой кнопкой мыши узел решения и выберите «Найти проблемы с кодом». В окне инструмента «Результаты проверки» вы можете сгруппировать по «Типу проблемы» и найти «Тип или член типа никогда не используется», чтобы получить все неиспользуемые классы (и многие другие неиспользуемые символы).
Второй вариант (после включения «Анализировать ошибки в решении») - перейти к любому неиспользуемому классу, нажать Alt + Enter, выбрать «Параметры для 'Тип или тип члена ...' проверки» | Найдите все проблемы с кодом этого типа | Полное решение.
Решение от @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, но он может быть воскрешен при использовании внедрения зависимостей.