Найти неиспользуемые классы в проекте.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

Правило NDepend, чтобы найти неиспользуемые методы (мертвые методы

Но это правило наивно и будет возвращать тривиальные ложные срабатывания. Во многих ситуациях метод никогда не вызывается, но он не используется (точка входа, конструктор класса, финализатор...), поэтому 3 правила по умолчанию более разработаны:

NDepend интегрирован в Visual Studio, поэтому эти правила можно проверять / просматривать / редактировать прямо в IDE. Инструмент также может быть интегрирован в процесс CI и может создавать отчеты, которые будут отображать нарушенные правила и элементы кода виновника.

Если вы нажмете эти 3 ссылки на исходный код этих правил, вы увидите, что те, которые касаются типов и методов, немного сложны. Это потому, что они обнаруживают не только неиспользуемые типы и методы, но также типы и методы, используемые только неиспользуемыми мертвыми типами и методами (рекурсивные).

Это статический анализ, отсюда и префикс Потенциально в именах правил. Если элемент кода используется только для отражения, эти правила могут рассматривать его как неиспользуемый, что не так.

В дополнение к использованию этих 3 правил, я бы посоветовал измерять покрытие кода тестами и стремиться к полному охвату. Часто вы увидите, что код, который не может быть покрыт тестами, на самом деле является неиспользованным / мертвым кодом, который можно безопасно отбросить. Это особенно полезно в сложных алгоритмах, где неясно, достижима ли ветвь кода или нет.

Resharperвключенной проверкой решения) автоматически уведомляет вас о неиспользуемых классах в вашем проекте и решении

Другие вопросы по тегам