Отримайте список нульових довідкових кодів у Visual Studio


133

У візуальній студії 2013 кількість посилань спеціального Кодексу (метод, властивість, поле, ...) показано об'єктивом Code . Я хочу отримати невикористані (нульові посилання) Коди у візуальній студії. Чи є спосіб отримати їх?

Я маю на увазі нижче посилання:

введіть тут опис зображення


7
Я думаю, що він хоче перелік усіх методів, на які немає посилань, а не звести кількість посилань на цей конкретний метод до нуля.
Юрген Каміллері

1
Якщо ви дійсно хочете , щоб знайти невикористовувані посилання, ви знайдете багато повторюваних питань. Просто google для "c # знайти невикористаний код"
Panagiotis Kanavos

1
так, я хочу знайти всі невикористані коди, що містять Методи, Властивості тощо.
Nima Rostami

1
Пам’ятайте, що ви не можете бути впевнені, що а publicне використовується без пошуку всієї бази коду. Однак для невикористаних внутрішніх та приватних осіб Аналіз коду попередить вас, якщо у вас включено відповідне попередження.
Меттью Уотсон

2
Через роки скріншот продовжує вводити в оману.
Сінджай

Відповіді:


184

Мабуть, найкращий і найпростіший спосіб досягти того, що вам потрібно, - це використовувати інструмент аналізу коду для вбудовування з Visual Studio, щоб знайти та перенести вас безпосередньо до мертвого коду та невикористаних членів.

З цією метою я створив новий файл набору правил аналізу коду (через File-> New-> File , переконавшись, що General у лівій панелі вибрано та прокручується вниз, щоб знайти набір правил аналізу коду , давши йому ім'я файлу, потім шукаючи та вибір наведених нижче правил). Нижче див. Вміст файлу набору правил, який ви можете скопіювати та вставити у новий файл із розширенням .ruleset для використання.

З огляду на файл набору правил, можна клацнути правою кнопкою миші на файл проекту на панелі Провідника рішень і виберіть Властивості . У вікнах властивостей проекту натисніть на вкладку Аналіз коду на панелі ліворуч та натисніть кнопку Відкрити, щоб перейти до місця розташування файлу .ruleset. Якщо ви перейдете до властивостей файлу рішення (на відміну від файлу проекту), ви можете встановити файл аналізу коду для кожного проекту в рішенні в одному місці (у розділі Налаштування аналізу коду та за допомогою випадаючого меню виберіть ПРИМІТКА: Ви, мабуть, попередньо переглянули файл набору правил, щоб він відобразився у спадному вікні цього вікна властивостей).

Тоді ви просто запускаєте аналіз коду на проекти / рішення (через Analyze-> Run Code Analysis on Solution -OR- Alt + F11 ), і він повернеться як попередження, будь-які нерозділені методи або невикористані члени, які він знайде. Він навіть знайде методи, на які посилається метод, який сам не має посилання в іншому місці.

Однак будьте обережні, оскільки один із способів аналізу коду для мертвого коду може призвести до помилки, якщо посилання є «прихованим», лише коли-небудь викликаючи метод через делегатів, і, звичайно, рефлексія.

Правила виявлення мертвого коду, зокрема:

  • Приватні методи, які не викликаються з будь-якого іншого коду (CA1811)
  • Невикористані локальні змінні (CA1804)
  • Невикористані приватні поля (CA1823)
  • Невикористані параметри (CA1801)
  • Внутрішні класи, які не інстанціюються жодним іншим кодом (CA1812).
  • Мертвий код у порозрядному або АБО обмеженому вимикачі

Нижче наведено вміст .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>

30
Я не думаю, що це повністю відповідає на питання. Основна відмінність полягає в тому, що CodeLens скаже вам, що метод PUBLIC має нульові посилання у всьому рішенні. Це ключ. FxCop, R # та ваш метод чудово підходить для всього, що не є загальнодоступним.
Скотт Уайлі

1
@ScottWylie - я не згоден. Я просто спробував вищезазначене рішення, і це не позначило не посилання на публічні методи. CodeLens був винятковим при позначенні мертвого коду, нерозділених локальних речей та невикористаних змінних. Я думаю, що це отримує більшість людей саме те, що вони хочуть без використання інструменту сторонніх виробників.
Майк

7
@mike Поміркуйте про це: Якщо ви хочете знайти мертвий код при масовій операції, ви, як правило, не переймаєтесь приватними / захищеними членами, оскільки це локальні проблеми. Наприклад, я мігрую проект 500k + LoC із 100+ проектами та 10+ рішеннями в архітектуру шаблону сховища. Після міграції компонента мені потрібно знати, які старі інтерфейси я можу видалити. У деяких IDE, таких як Eclipse, є інструменти саме для цього. Засмічені локальні методи просто не викликають у мене клопоту, я хотів би список класів / інтерфейсів PUBLIC, де кодовий об'єктив міг би сказати мені "0".
Олівер Шіммер

0

https://scottlilly.com/c-code-quality-improvement/remove-unused-classes-properties-and-functions/

"На жаль, [в Visual Studio Analysis] ви можете виявити лише невикористані приватні члени. Це тому, що аналізатор коду припускає, що публічні члени можуть використовуватися іншими програмами. Це може бути правдою, якщо ви публікуєте їх як API через веб-сервіс або звільнення вашого коду як бібліотеки. ... ReSharper має аналогічні функції аналізу коду - з перевагою перевірки на невикористані публічні члени. "


0

Я б переглянув кожен файл, виконав команду Ctrl-MO, щоб все згортати, а потім прокручувати, шукаючи посилання 0.


-1

Ось ручний спосіб досягти цього, який я використав для пошуку невикористаних класів, які позначені загальнодоступними.

  1. Шукайте та замінюйте весь «громадський клас» на «приватний клас» для одного проекту у своєму рішенні. Також може знадобитися замінити "публічний статичний клас" та / або "публічний абстрактний клас".
  2. Побудуйте, щоб знайти всі помилки
  3. Для кожної помилки в збірці використовуйте керування джерелом, щоб відновити файл для посиланого класу.
  4. Повторюйте для кожної помилки, поки збірка не вдається.
  5. Будь-які файли, які не були відновлені, є ймовірними кандидатами для видалення.
  6. (необов’язково) Перейменуйте класи у вищезазначених файлах та зробіть ще одну збірку, щоб знайти помилки.
  7. Отримайте останній пошук назви класу, який ви хочете видалити, щоб підтвердити, що жодних випадків його використання у відображенні чи магічних рядках.
  8. Видаліть ідентифіковані файли класу, що не використовуються.
  9. Повторіть для кожного проекту рішення, яке потрібно очистити.

Примітка. Якщо ви не дотримуєтесь одного класу на правило, це потребує набагато більше роботи. Також будь-які кінцеві точки служби API, які вам знадобляться, повинні переконатися, що вони не використовуються жодними зовнішніми проектами.


14
Це зовсім не практично.
Дон

1
Це працює для мене у великому проекті і є одним рішенням. Випадки можуть відрізнятися там, де це складніше, але я хотів надати це як можливість.
Ульфій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.