Подавление нарушений анализа кода

При совместной работе с командой при создании кода часто полезно указать, что предупреждение неприменимо. Подавление нарушений анализа кода указывает членам группы, что код был проверен, и предупреждение может быть отложено. В следующих разделах описаны различные способы подавления нарушений анализа кода с помощью интегрированной среды разработки Visual Studio.

Подавление нарушений с помощью файла EditorConfig

В файле EditorConfig для решения или проекта добавьте запись для каждого правила, для которого требуется настроить и задать его серьезность none. Например, dotnet_diagnostic.CA1822.severity = none. Дополнительные сведения см. в разделе "Серьезность правил" вручную в файле EditorConfig. Сведения о добавлении файла EditorConfig см. в разделе "Добавление файла EditorConfig" в проект.

Подавление нарушений в исходном коде

Нарушения в исходном коде можно подавлять с помощью директивы препроцессора, которая подавляет нарушения для определенной строки кода:

Кроме того, можно использовать атрибут SuppressMessageAttribute для подавления предупреждения в коде C# и Visual Basic.

Подавление нарушений с помощью редактора кода

Чтобы отключить нарушения с помощью редактора кода, выполните следующие действия.

  1. Поместите курсор в строку кода с нарушением и нажмите клавиши CTRL+Period (.) или ALT+ВВОД, чтобы открыть меню "Быстрые действия".

  2. Выберите "Отключить" или настроить>номер> правила "Отключить<", а затем выберите "Источник" или "Источник" (атрибут).

    • Если вы выбрали в source, вы увидите предварительную версию директивы препроцессора, добавленной в код.

      Снимок экрана: выбор источника в меню

    • При выборе в source (атрибут) вы увидите предварительный просмотр атрибута SuppressMessageAttribute, добавленного в код.

      Снимок экрана: выбор источника (атрибута) в меню быстрого подавления действий.

Подавление нарушений с помощью списка ошибок

Чтобы отключить нарушения с помощью окна списка ошибок, выполните следующие действия.

  1. В окне списка ошибок выберите правила, которые нужно отключить.

  2. Щелкните правой кнопкой мыши и выберите "Отключить>в источнике".

    Откроется диалоговое окно "Предварительные изменения" и отображается предварительная версия директивы предупреждения #pragma C# или директивы предупреждения Visual Basic #Disable, добавленной в исходный код.

    Снимок экрана: диалоговое окно

  3. Нажмите кнопку "Применить" , чтобы сохранить изменения в файле кода.

Исключение сборки списка ошибок диагностика

Если в окне "Список ошибок" не отображается параметр меню "Отключить", нарушение, скорее всего, происходит из сборки, а не динамический анализ. В окне "Список ошибок" отображаются диагностика или нарушения правил как в анализе динамического кода, так и в сборках. Так как сборка диагностика может быть устаревшей, например, если вы редактировали код для исправления нарушения, но не перестроили его, вы не всегда можете отключить эти диагностика из списка ошибок.

Диагностика из динамического анализа или IntelliSense всегда актуальна с текущими источниками и всегда может быть отключена из списка ошибок. Чтобы исключить диагностика сборки из выбранного варианта, выполните следующие действия.

  1. В раскрывающемся списке фильтров списка ошибок измените выбор из сборки и IntelliSense только на IntelliSense.

    Снимок экрана: фильтр источника списка ошибок.

  2. Выберите диагностика, которые вы хотите отключить и продолжить, как описано ранее.

Подавление нарушений с помощью глобального файла подавления

Глобальный файл подавления использует атрибут SuppressMessageAttribute для подавления нарушений кода.

Использование глобального файла подавления из редактора кода

Чтобы отключить нарушения с помощью глобального файла подавления с помощью редактора кода, выполните следующие действия.

  1. В редакторе кода поместите курсор в строку кода с нарушением и нажмите клавиши CTRL+Period (.) или ALT+ВВОД, чтобы открыть меню "Быстрые действия".

  2. Выберите "Отключить <номер> правила", а затем в файле подавления.

    Visual Studio создает вкладку в редакторе кода, содержащего новый глобальный файл подавления.

Использование глобального файла подавления из списка ошибок

Чтобы отключить нарушения с помощью глобального файла подавления с помощью окна списка ошибок, выполните следующие действия.

  1. В окне списка ошибок выберите правила, которые нужно отключить.

  2. Щелкните правой кнопкой мыши и выберите "Отключить>в файле подавления".

    Откроется диалоговое окно "Предварительный просмотр изменений" и отображается предварительный просмотр атрибута SuppressMessageAttribute , добавленного в глобальный файл подавления.

    Снимок экрана: диалоговое окно

  3. Нажмите кнопку "Применить" , чтобы сохранить глобальный файл подавления.

Подавление всех текущих нарушений

Подавление всех текущих нарушений иногда называется базовой структурой. Чтобы отключить все текущие нарушения в решении или проекте, выполните следующие действия.

  1. В строке меню Visual Studio выберите "Анализ>сборки и подавление активных проблем".

  2. Выберите вариант "Решение для подавления нарушений для всего решения" или выберите "Для <имени> проекта" для подавления нарушений только для проекта.

Подавление нарушений с помощью параметров проекта

Чтобы отключить нарушения с помощью параметров проекта Обозреватель решений, выполните следующие действия.

  1. В Обозреватель решений выберите проект.

  2. Щелкните правой кнопкой мыши и выберите пункт "Свойства " (или нажмите клавиши ALT+ВВОД).

  3. В окне "Свойства" выберите "Анализ кода" на левой панели, а затем снимите флажок "Отключить результаты" из созданного кода.

Подавление нарушений с помощью набора правил

В редакторе набора правил снимите флажок проверка рядом с его именем или задайте для действиязначение None.

Подавление в источнике и атрибут SuppressMessageAttribute

Подавление в источнике (ISS) использует SuppressMessageAttribute атрибут для подавления предупреждения. Атрибут можно добавить в SuppressMessageAttribute исходный файл рядом с сегментом кода, который создал предупреждение.

Атрибут можно ввести вручную в редакторе кода или автоматически добавить атрибут следующим образом:

  1. В редакторе кода поместите курсор в строку кода с нарушением и нажмите клавиши CTRL+Period (.) или ALT+ВВОД, чтобы открыть меню "Быстрые действия".

  2. Выберите "Отключить" или настроить>номер правила "Отключить<"> в меню "Быстрые действия".

  3. Выполните один из следующих шагов:

    • Выберите в поле Source (attribute).

      Visual Studio добавляет SuppressMessageAttribute атрибут в код.

    • Выберите в файле подавления.

      Visual Studio создает вкладку в редакторе кода, содержащую новый глобальный файл подавления с SuppressMessageAttribute атрибутами.

Атрибут SuppressMessageAttribute является условным атрибутом, который включается в метаданные сборки управляемого кода. Этот атрибут включается только в том случае, если CODE_ANALYSIS символ компиляции определен во время компиляции.

Только в коде C++ и CLI используйте макросы или CA_GLOBAL_SUPPRESS_MESSAGE в файле заголовка CA_SUPPRESS_MESSAGE для добавления атрибута.

При переносе проекта в последнюю версию Visual Studio может появиться большое количество предупреждений анализа кода. Если вы не готовы исправить предупреждения, вы можете отключить все из них, нажав кнопку "Анализ>сборки и подавление активных проблем".

Примечание.

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

Формат атрибута SuppressMessageAttribute

Атрибут SuppressMessageAttribute имеет следующий формат:

[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]

К свойствам атрибута относятся:

  • Category: категория правила. Дополнительные сведения о категориях правил анализа кода см. в разделе "Правила качества кода".

  • CheckId: Идентификатор правила. Поддержка включает как короткое, так и длинное имя идентификатора правила. Короткое имя CAXXXX— длинное имя CAXXXX:FriendlyTypeName.

  • Justification: текст, используемый для документирования причины подавления сообщения.

  • MessageId: уникальный идентификатор проблемы для каждого сообщения.

  • Scope: целевой объект, на котором отключается предупреждение. Если целевой объект не указан, система устанавливает его в целевой объект атрибута. Поддерживаемые область включают:

    • module: этот область подавляет предупреждения для сборки. Это глобальное подавление, которое применяется ко всему проекту.

    • resource: (Только устаревшая версия FxCop) Эта область подавляет предупреждения в диагностических сведениях, записанных в файлы ресурсов, которые входят в модуль (сборку). Этот область не считывается и не учитывается в компиляторах C#/VB для анализатора Roslyn диагностика, который анализирует только исходные файлы.

    • type: этот область подавляет предупреждения для типа.

    • member: этот область подавляет предупреждения для элемента.

    • namespace: этот область подавляет предупреждения для самого пространства имен. Он не подавляет предупреждения о типах в пространстве имен.

    • namespaceanddescendants: (Требуется компилятор версии 3.x или более поздней версии и Visual Studio 2019 или более поздней версии) Эта область подавляет предупреждения в пространстве имен и все его потомки. Устаревший анализ игнорирует namespaceanddescendants значение.

  • Target: идентификатор, указывающий целевой объект, на котором подавляется предупреждение. Он должен содержать полное имя компонента.

При отображении предупреждений в Visual Studio можно просмотреть примеры SuppressMessageAttribute, добавив подавление в глобальный файл подавления. Атрибут подавления и его обязательные свойства отображаются в окне предварительного просмотра.

Подавление использованияMessageAttribute

Предупреждения анализа кода подавляются на уровне, к которому SuppressMessageAttribute применяется атрибут. Например, атрибут можно применить на уровне сборки, модуля, типа, члена или параметра. Цель применения этого атрибута заключается в тесной привязке информации подавления к коду, в котором происходит нарушение.

Общая форма подавления включает категорию правил и идентификатор правила, который содержит необязательное удобочитаемое пользователем представление имени правила. Например:

[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]

Если существуют строгие причины для минимизации метаданных подавления в источнике, имя правила может быть опущено. Категория правил и его идентификатор правила вместе образуют достаточно уникальный идентификатор правила. Например:

[SuppressMessage("Microsoft.Design", "CA1039")]

По соображениям удобства обслуживания не рекомендуется указывать имя правила.

Подавление выборочных нарушений в теле метода

Атрибуты подавления могут применяться к методу, но не могут быть внедрены в текст метода. Все нарушения определенного правила подавляются при добавлении атрибута SuppressMessageAttribute в метод.

В некоторых случаях может потребоваться отключить конкретный экземпляр нарушения. Рассмотрим пример, в котором будущий код не будет автоматически исключен из правила анализа кода. Некоторые правила анализа кода позволяют подавлять определенный экземпляр нарушения с помощью MessageId свойства атрибута SuppressMessageAttribute . Как правило, устаревшие правила для нарушений определенного символа (локальной переменной или параметра) уважают MessageId свойство. CA1500:VariableNamesShouldNotMatchFieldNames является примером такого правила. Однако устаревшие правила для нарушений исполняемого кода (не символа) не уважают MessageId свойство. Кроме того, анализаторы платформы компилятора .NET ("Roslyn") не уважают MessageId свойство.

Чтобы отключить определенное нарушение правила, укажите имя символа для MessageId свойства атрибута SuppressMessageAttribute . В следующем примере показан код с двумя нарушениями CA1500:VariableNamesShouldNotMatchFieldNames: одно нарушение name переменной и другое нарушение переменной age . Только нарушение символа age подавляется.

public class Animal
{
    int age;
    string name;

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1500:VariableNamesShouldNotMatchFieldNames", MessageId = "age")]
    private void PrintInfo()
    {
        int age = 5;
        string name = "Charlie";

        Console.WriteLine($"Age {age}, Name {name}");
    }
}

Подавление глобального уровня

Средство анализа управляемого кода проверяет SuppressMessageAttribute атрибуты, применяемые на уровне сборки, модуля, типа, члена или параметра. Он также отправляет нарушения в отношении ресурсов и пространств имен. Эти нарушения должны применяться на глобальном уровне и область и нацелены на них. Например, следующее сообщение подавляет нарушение пространства имен:

[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]

Для подавления глобального уровня:

  • При подавлении предупреждения с namespace помощью область он подавляет предупреждение для самого пространства имен. Он не подавляет предупреждение о типах в пространстве имен.

  • Target всегда содержит полное имя элемента.

  • Любое подавление может быть выражено путем указания явного область. Эти подавления должны жить на глобальном уровне. Невозможно указать подавление уровня члена, изменив тип.

  • Подавление глобального уровня — единственный способ подавления сообщений, ссылающихся на созданный компилятором код, который не сопоставляется с явным образом предоставленным источником пользователя. Например, следующий код подавляет нарушение в конструкторе, созданном компилятором:

    [module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]

Глобальный файл подавления

Глобальный файл подавления поддерживает подавление, которое является либо подавлением глобального уровня, либо подавлением, которые не указывают целевой объект. Например, подавление нарушений на уровне сборки хранится в этом файле. Кроме того, некоторые ASP.NET подавления хранятся в этом файле, так как параметры уровня проекта недоступны для кода в форме. Visual Studio создает и добавляет глобальный файл подавления в проект при первом выборе параметра "Файл подавления проекта" в окне "Список ошибок".

Область подавления модуля

Вы можете отключить нарушения качества кода для всей сборки с помощью module область.

Например, следующий атрибут в файле проекта GlobalSuppressions подавляет нарушение ConfigureAwait для проекта ASP.NET Core:

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Reliability", "CA2007:Consider calling ConfigureAwait on the awaited task", Justification = "ASP.NET Core doesn't use thread context to store request context.", Scope = "module")]

Созданный код

Компиляторы управляемого кода и некоторые внешние средства создают код для быстрого разработки кода. Созданный компилятором код, который отображается в исходных файлах, помечается атрибутом GeneratedCodeAttribute .

Для анализа исходного кода можно отключить сообщения в созданном коде в файле editorconfig . Дополнительные сведения см. в разделе "Исключить созданный код".

Для анализа устаревшего кода можно выбрать, следует ли подавлять предупреждения и ошибки анализа кода для созданного кода. Сведения о подавлении таких предупреждений и ошибок см. в разделе "Подавление предупреждений анализа кода" для созданного кода.

Примечание.

Анализ кода игнорируется GeneratedCodeAttribute , если он применяется ко всей сборке или одному параметру.