Ответ 1
Вероятно, лучший и самый простой способ добиться того, чего вы хотите - это использовать встроенный инструмент анализа кода в Visual Studio, чтобы найти и перенаправить вас прямо к мертвому коду и неиспользуемым членам.
Для этого я создал новый файл набора правил анализа кода (с помощью File-> New-> File, убедившись, что General в левой панели был выбран, и прокрутив вниз, чтобы найти Набор правил анализа кода, присваивая ему имя файла, затем ища и выбирая приведенные ниже правила). Ниже приведено содержимое файла набора правил, который вы можете скопировать и вставить в новый файл с расширением .ruleset для использования.
Имея файл набора правил, можно щелкнуть правой кнопкой мыши файл проекта на панели Solution Explorer и выбрать Свойства. В окнах свойств проекта перейдите на вкладку Code Analysis на левой панели, а затем нажмите Открыть, чтобы найти расположение файла .ruleset. Если вы перейдете к свойствам файла решения (в отличие от файла проекта), вы можете установить файл анализа кода для каждого проекта в решении в одном месте (в разделе Настройки анализа кода и, используя чтобы выбрать файл набора правил, выберите его в раскрывающемся списке. ПРИМЕЧАНИЕ. Однако вы должны были предварительно найти файл набора правил, чтобы он отображался в раскрывающемся списке в этом окне свойств).
Затем вы просто запускаете анализ кода в проектах/решении (через Analyze-> запустить анализ кода в решении -OR- Alt + F11), и он возвращается в виде предупреждений, любые не связанные ссылками методы или неиспользуемые члены, которые он находит. Он даже найдет методы, на которые ссылается метод, который сам не имеет ссылок в другом месте.
Однако будьте осторожны, так как один из способов, которым анализ кода для мертвого кода может направить вас неправильно, - это если ссылка "скрыта", вызывая метод только через делегатов, и, конечно, с помощью отражения.
В частности, правила обнаружения мертвого кода:
- Закрытые методы, которые не вызываются из любого другого кода (CA1811)
- Неиспользуемые локальные переменные (CA1804)
- Неиспользуемые частные поля (CA1823)
- Неиспользуемые параметры (CA1801)
- Внутренние классы, которые не создаются из какого-либо другого кода (CA1812).
- Мертвый код в битовом ИЛИ ограниченном переключателе (C6259)
Ниже приведено содержимое файла .ruleset, который можно получить, выполнив описанные выше действия для удобства. Вы можете просто скопировать приведенный ниже XML, вставить его в notepad++, сохранить где-нибудь с расширением .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>
Надеюсь, это поможет вам, и не забудьте выбрать лучший ответ.