Получить список нулевых ссылочных кодов в Visual Studio

В visual studio 2013 количество ссылок специального кода (метод, свойство, поле,...) показано Объектом кода. Я хочу получить неиспользуемые (нулевые ссылки) Коды в visual studio. Есть ли способ получить их?

Я имею в виду ниже ссылку:

enter image description here

Ответ 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>

Надеюсь, это поможет вам, и не забудьте выбрать лучший ответ.

Ответ 2

Вот ручной способ сделать это, который я использовал для поиска неиспользуемых классов, помеченных как публичные.

  1. Найдите и замените все "общедоступный класс" на "частный класс" для одного проекта в вашем решении. Также может потребоваться заменить "открытый статический класс" и/или "открытый абстрактный класс".
  2. Построить, чтобы найти все ошибки
  3. Для каждой ошибки в сборке используйте исходный код для восстановления файла для указанного класса.
  4. Повторите для каждой ошибки, пока сборка не будет успешной.
  5. Все оставшиеся файлы, которые не были восстановлены, скорее всего, являются кандидатами на удаление.
  6. (необязательно) Переименуйте классы в указанных выше файлах и выполните еще одну сборку, чтобы найти ошибки.
  7. Выполните последний поиск имени класса, который вы хотите удалить, чтобы убедиться, что нет ни одного экземпляра его, используемого в отражениях или магических строках.
  8. Удалите идентифицированные неиспользуемые файлы классов.
  9. Повторите эти действия для каждого проекта решения, которое вы хотите очистить.

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