Найти неиспользуемые классы в проекте.net
У меня есть проект VS.NET 2008. Можно ли проверить классы, которые ранее не использовались в проекте? С FXcop я могу найти неиспользуемые переменные и неиспользуемый код, но не неиспользуемые классы.
2 ответа
Инструмент NDepend может помочь найти неиспользуемый код в базе кода.NET. Отказ от ответственности: я один из разработчиков этого инструмента.
Чтобы уточнить, NDepend предлагает написать Code Rule поверх 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 и может создавать отчеты, которые будут отображать нарушенные правила и элементы кода виновника.
Если вы нажмете эти 3 ссылки на исходный код этих правил, вы увидите, что те, которые касаются типов и методов, немного сложны. Это потому, что они обнаруживают не только неиспользуемые типы и методы, но также типы и методы, используемые только неиспользуемыми мертвыми типами и методами (рекурсивные).
Это статический анализ, отсюда и префикс Потенциально в именах правил. Если элемент кода используется только для отражения, эти правила могут рассматривать его как неиспользуемый, что не так.
В дополнение к использованию этих 3 правил, я бы посоветовал измерять покрытие кода тестами и стремиться к полному охвату. Часто вы увидите, что код, который не может быть покрыт тестами, на самом деле является неиспользованным / мертвым кодом, который можно безопасно отбросить. Это особенно полезно в сложных алгоритмах, где неясно, достижима ли ветвь кода или нет.
Resharper (с включенной проверкой решения) автоматически уведомляет вас о неиспользуемых классах в вашем проекте и решении