.NET найти мертвый код в нескольких решениях - PullRequest
8 голосов
/ 25 мая 2011

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 25 мая 2011

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

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

1 голос
/ 25 мая 2011

Вы также можете оформить заказ NDepend .

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

0 голосов
/ 05 июля 2011

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

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

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

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

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

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

...