У меня есть проект VS.NET 2008. Можно ли проверить классы, которые не используются в проекте? С помощью FXcop я могу найти неиспользуемые переменные и неиспользуемый код, но не неиспользуемые классы.
Поиск неиспользуемых классов в проекте .net
Ответ 1
Инструмент NDepend может помочь найти неиспользуемый код в базе данных .NET. Отказ от ответственности: я являюсь разработчиком этого инструмента.
Чтобы разработать немного, NDepend предлагает написать Code Rule over LINQ Query (CQLinq). Около 200 правил кода по умолчанию, 3 из которых посвящены обнаружению неиспользуемого/мертвого кода
В принципе такое правило для обнаружения неиспользуемого метода, например, выглядит следующим образом:
// <Name>Dead Methods</Name>
warnif count > 0
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m
Но это правило наивно и вернет тривиальные ложные срабатывания. Существует много ситуаций, когда метод никогда не вызывается, но он не используется (точка входа, конструктор класса, финализатор...), поэтому правила 3 по умолчанию более разработаны:
- Потенциально мертвые типы (следовательно, обнаружить неиспользуемый класс, структуру, интерфейс, делегат...)
- Потенциально мертвые методы
- Потенциально мертвые поля
NDepend интегрирован в Visual Studio, поэтому эти правила могут быть проверены/просмотрены/отредактированы прямо внутри IDE. Инструмент также может быть интегрирован в ваш процесс CI, и он может построить reports, в котором будут отображаться нарушения правил и элементы кода. >
Если вы нажмете эти 3 ссылки на исходный код этих правил, вы увидите, что те, что относятся к типам и методам, немного сложны. Это связано с тем, что они обнаруживают не только неиспользуемые типы и методы, но также типы и методы, используемые только неиспользуемыми мертвыми типами и методами (рекурсивными).
Это статический анализ, поэтому префикс Потенциально в именах правил. Если элемент кода используется только через отражение, эти правила могут считать его неиспользованным, что не так.
В дополнение к использованию этих 3 правил я бы посоветовал измерить охват кода тестами и стремиться к полному охвату. Часто вы увидите, что код, который не может быть охвачен испытаниями, на самом деле неиспользуемый/мертвый код, который можно безопасно отбросить. Это особенно полезно в сложных алгоритмах, где неясно, доступна ли ветвь кода или нет.
Ответ 2
Resharper (при проверке всего решения) автоматически уведомляет вас о неиспользуемых классах в вашем проекте и решении