Вероятно, лучший и самый простой способ добиться того, что вам нужно, - это использовать встроенный инструмент анализа кода с Visual Studio, чтобы найти и направить вас прямо к мертвому коду и неиспользуемым членам.
Для этого я создал новый файл набора правил анализа кода (через File-> New-> File , убедившись, что на левой панели выбрано General и прокрутите вниз, чтобы найти набор правил анализа кода , присвоив ему имя файла, затем выполнив поиск и выбрав следующие правила). См. Ниже содержимое файла набора правил, который вы можете скопировать и вставить в новый файл с расширением .ruleset для использования.
Имея файл набора правил, можно щелкнуть правой кнопкой мыши файл проекта в панели « Обозреватель решений» и выбрать « Свойства» . В окнах свойств проекта щелкните вкладку Анализ кода на левой панели, а затем щелкните Открыть, чтобы перейти к расположению файла .ruleset. Если вы перейдете к свойствам файла решения (в отличие от файла проекта), вы можете установить файл анализа кода для каждого проекта в решении в одном месте (в разделе Параметры анализа кода и используя раскрывающийся список для выбора ПРИМЕЧАНИЕ: Вы должны были предварительно просмотреть файл набора правил, чтобы он отображался в раскрывающемся списке в этом окне свойств).
Затем вы просто запускаете анализ кода в проектах / решении (через Analyze-> Run Code Analysis On Solution -OR- Alt + F11 ), и он вернется в виде предупреждений, любых методов, на которые нет ссылок, или неиспользуемых элементов, которые он найдет. Он даже найдет методы, на которые ссылается метод, который сам не имеет ссылок в другом месте.
Однако будьте осторожны, поскольку один из способов, которым анализ кода мертвого кода может ввести вас в заблуждение, заключается в том, что ссылка «скрыта», вызывая метод только через делегаты и, конечно же, отражение.
В частности, правила обнаружения мертвого кода:
- Частные методы, которые не вызываются из другого кода (CA1811)
- Неиспользуемые локальные переменные (CA1804)
- Неиспользуемые частные поля (CA1823)
- Неиспользуемые параметры (CA1801)
- Внутренние классы, которые не создаются из любого другого кода (CA1812).
- Мертвый код в ограниченном переключателе побитового ИЛИ (C6259)
Ниже приведено содержимое файла .ruleset, который можно получить, выполнив описанные выше шаги, для вашего удобства. Вы можете просто скопировать приведенный ниже XML, вставить его в блокнот ++, сохранить где-нибудь с расширением .ruleset , найти и использовать, как описано выше:
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Dead Code Rules" Description=" " ToolsVersion="12.0">
<Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
<Rule Id="CA1801" Action="Warning" />
<Rule Id="CA1804" Action="Warning" />
<Rule Id="CA1811" Action="Warning" />
<Rule Id="CA1812" Action="Warning" />
<Rule Id="CA1823" Action="Warning" />
</Rules>
<Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
<Rule Id="C6259" Action="Warning" />
</Rules>
</RuleSet>