Как найти неиспользуемый код в группе проектов? - PullRequest
2 голосов
/ 20 сентября 2019

В моем решении я хотел бы автоматически обнаруживать неиспользуемый код как часть CI.Более конкретно, я хочу проанализировать группу проектов (например, те, которые под /src, но не /test), а затем решить в этой области, что используется, а что нет.Например: метод public в низкоуровневом проекте должен быть идентифицирован как как неиспользуемый, если ни один из ссылочных проектов в той же группе не использует его (некоторые инструменты не обнаруживают это, потому что publicчлен потенциально может также использоваться за пределами решения, но меня это не интересует, поскольку я пишу продукт, а не библиотеку для использования).

Несколько лет назад я смог добиться этогоиспользуя FxCop, настроив проект FxCop, который будет содержать соответствующие проекты, а затем проведет анализ по ним.

Сегодня в мире .NET Core кажется, что анализаторы Roslyn - это то, что нужно (яможет быть не так, и, пожалуйста, дайте мне знать, если есть лучшие альтернативы для работы), но я не знаю, как я могу настроить набор правил, который охватывает несколько проектов и если анализаторы смогут обнаружить неиспользуемый код, как описано.Глядя на такие статьи, как Быстрее писать код с помощью Roslyn Analyzers , кажется, что наборы правил нацелены только на один проект (а именно, для которого установлен Microsoft.CodeAnalysis.FxCopAnalyzers ).

1 Ответ

0 голосов
/ 23 сентября 2019

Для этого можно использовать набор правил NDepend по умолчанию, в котором есть правила для обнаружения Неиспользуемые типы , Неиспользуемые методы и Неиспользуемые поля .

Инструмент может анализировать любой код .NET Core или .NET Framework.

Объем проекта NDepend может порождать несколько или все проекты VS решения VS, и даже несколько решений VS.

> Я хочу проанализировать группу проектов (например, те, которые находятся в / src, но не / test), а затем решить в этой области, что используется, а что нет.

Правила кода NDepend являются редактируемыми запросами C # LINQ , поэтому вы можете легко отредактировать или продублировать правило по умолчанию для применения некоторых ограничений, например:

from t in JustMyCode.Types
   .Where(t1 => t1.ParentNamespace.FullNameLike("*YourRegexPattern*")) 
where t.NbTypesUsingMe == 0 && canTypeBeConsideredAsDeadProc(t)
select t
...

Отказ от ответственности: я работаю для NDepend

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...