.NET находит мертвый код в нескольких решениях

#.net #visual-studio #reference #projects-and-solutions #dead-code

#.net #visual-studio #ссылка #проекты и решения #мертвый код

Вопрос:

У нас есть продукт с ~ 15 решениями, в каждом из которых несколько проектов.

Вопрос довольно прост: какой инструмент позволит нам выполнить поиск мертвого кода по всей кодовой базе?

Поиск в рамках одного решения достаточно прост (для этого есть множество ответов на SO).

Но как насчет определения, действительно ли «public void Foo()» в проекте AlphaProj решения AlphaSol, которое не используется в самом AlphaSol, используется, например, в BetaSol?

Ответ №1:

Хотя у вас есть 15 решений, ничто не мешает вам создать другое решение, в котором будут ссылки на все проекты, скажем, All.sln. Поэтому всякий раз, когда вам нужно найти внешние ссылки, вы открываете это решение All.sln и ищете ссылки.

У нас, вероятно, есть около 100 решений и один All.sln, который ссылается на все проекты из этих решений. Легко добавить все проекты из одного решения во все.sln: вы просто выбираете Add Existing Projects и выбираете один из этих 15 файлов решений. Вам нужно настроить тип файла в Add Existing Projects диалоговом окне, чтобы иметь возможность выбрать файл решения. Кроме того, чтобы упорядочить это большое решение, вы можете использовать папки решений.

Ответ №2:

Возможно, вы также захотите проверить NDepend.

Поскольку другой ответ достаточно прост для вашей непосредственной потребности, и я не хочу звучать как плохая реклама, я предоставляю заинтересованному читателю узнать больше об этом инструменте.

Ответ №3:

Чтобы немного подробнее остановиться на ответе Кристиана, инструмент NDepend действительно может помочь найти неиспользуемый код в базе кода .NET. Отказ от ответственности: я являюсь одним из разработчиков этого инструмента.

NDepend предлагает написать правило кода над запросом LINQ (CQLinq). Предлагается около 200 правил кода по умолчанию, 3 из которых предназначены для обнаружения неиспользуемого / нерабочего кода:

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

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

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

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

Комментарии:

1. Может ли он обнаруживать ссылки на методы в интерфейсах?