Я хочу удалить foo(), если foo() не вызывается из любого места.
Есть ли инструмент для поиска неучтенных функций (мертвый, устаревший код) в приложении С#?
Ответ 1
Gendarme будет обнаруживать частные методы без входящих вызовов. Доступна кросс-платформа, и последняя версия обрабатывает " AvoidUncalledPrivateCodeRule".
FxCop будет определять общедоступные/защищенные методы без входящих вызовов. Тем не менее, FxCop не обнаруживает все методы без вызывающих абонентов, поскольку он предназначен для проверки того, что ваш код является частью библиотеки, поэтому публичные члены не учитываются. fooobar.com/questions/34261/....
(править: добавлена информация о жандарме, которая фактически делает то, что задавал вопрошающий)
Ответ 2
NDepend также будет сообщать о потенциально неиспользуемом коде.
Ответ 3
Имейте в виду, что Resharper (и, вероятно, другие подобные инструменты) не будет выделять неиспользуемые методы, если методы отмечены public
. Инструмент анализа статического кода не сможет проверить, будут ли методы вашей сборки использоваться другими сборками вне вашего решения. Таким образом, первым шагом при отмене неиспользуемых методов является уменьшение их видимости до private
или internal
.
Ответ 4
Resharper делает это, а не только с помощью методов. Он также делает это с использованием операторов, переменных и т.д.
Ответ 5
Да, MZ-Tools addin имеет функцию просмотра мертвого кода.
Ответ 6
Инструмент NDepend может помочь найти неиспользуемый код в базе данных .NET. Отказ от ответственности: я являюсь разработчиком этого инструмента.
NDepend предлагает написать Правило кода над запросом LINQ (CQLinq). Примерно 200 правил кода по умолчанию, 3 из которых посвящены обнаружению неиспользуемого/мертвого кода:
- Потенциально мертвые типы (следовательно, обнаруживают неиспользуемый класс, структуру, интерфейс, делегат...)
- Потенциально мертвые методы
- Потенциально мертвые поля
NDepend интегрирован в Visual Studio, поэтому эти правила могут быть проверены/просмотрены/отредактированы прямо внутри IDE. Инструмент также может быть интегрирован в ваш процесс CI, и он может построить reports, в котором будут отображаться правила, нарушающие правила, и элементы кода преступления.
Если вы нажмете эти 3 ссылки на исходный код этих правил, вы увидите, что те, что относятся к типам и методам, немного сложны. Это связано с тем, что они обнаруживают не только неиспользуемые типы и методы, но также типы и методы, используемые только неиспользуемыми мертвыми типами и методами (рекурсивными).
Это статический анализ, поэтому префикс Потенциально в именах правил. Если элемент кода используется только через отражение, эти правила могут считать его неиспользованным, что не так.
В дополнение к использованию этих 3 правил я бы посоветовал измерить охват кода тестами и стремиться к полному охвату. Часто вы увидите, что код, который не может быть охвачен испытаниями, на самом деле неиспользуемый/мертвый код, который можно безопасно отбросить. Это особенно полезно в сложных алгоритмах, где неясно, доступна ли ветвь кода или нет.
Ответ 7
Хорошо, если VS не делает этого изначально, простым методом является щелчок правой кнопкой мыши по методу и выбор "найти все ссылки". Если есть только 1 ссылка (где она объявлена), она, скорее всего, больше не используется.