Как отключить конкретное предупреждение об анализе кода для всего класса

Я пытаюсь отключить правило анализа кода для всего класса, но НЕ для всего проекта, а только для одного класса. В приведенном ниже примере сборка генерирует предупреждение CA1822, так как считает, что методы модульного тестирования должны быть статическими.

Исправление заключается в добавлении следующего атрибута к каждому методу модульного тестирования: [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic")]

Однако это громоздко и загромождает класс множеством модульных тестов.

Я пробовал:

  1. Перемещение атрибута в класс
  2. Оборачивая все методы в

#pragma warning disable CA1822

#pragma warning restore CA1822

Ни один из этих двух подходов не сработал.

public class TestClass
{
    public TestClass()
    {
        // some setup here
    }

    [Fact]
    public void My_Unit_Test1()
    {
        // the 'this' parameter is never used, causes CA warning 1822
    }

    [Fact]
    public void My_Unit_Test2()
    {
        // the 'this' parameter is never used, causes CA warning 1822
    }
}

Использование VS2015 Update 2, .net 4.61 и новых анализаторов кода.


person SFun28    schedule 07.07.2016    source источник
comment
Я решил эту (и другие) проблемы, используя другой набор правил анализа кода для проектов модульного тестирования. Я отключил правила, которые не применялись к проектам модульного тестирования.   -  person Matthew Watson    schedule 07.07.2016
comment
@MatthewWatson - я также использую другой набор правил для тестовых проектов. В этом случае я хочу, чтобы правило применялось к моему проекту модульного тестирования, а не к одному конкретному классу.   -  person SFun28    schedule 07.07.2016
comment
К сожалению, вы не можете этого сделать — подавление всегда должно применяться к уровню, на котором сообщается о предупреждении/ошибке, поэтому, если это метод, вы можете подавить предупреждение только для этого метода.   -  person Matthew Watson    schedule 07.07.2016
comment
@MatthewWatson. Знаете ли вы, почему решение #pragma работает для Stylecop, но не для анализа кода?   -  person SFun28    schedule 07.07.2016
comment
— Боюсь, нет. Просто разные, наверное.   -  person Matthew Watson    schedule 07.07.2016


Ответы (3)


Щелкните значок лампочки [????] или нажмите комбинацию Ctrl + .. Это должно открыть контекстное меню, как показано ниже.

подавление

Затем выберите Подавить или настроить проблемыПодавить XXXв пункте меню «Файл подавления». Он создаст файл GlobalSuppression.cs, если он не существует, и добавит в него новую строку.

По умолчанию он подавляет предупреждение только для выбранного члена (метода). Вы можете изменить Scope на type и Target на полное имя класса (например: Project.Domain.MyAwesomeClass).

Вот пример:

[assembly: SuppressMessage("Design", "CA1062:Validate arguments of public methods", Justification = "This parameter of extension methods are always not null.", Scope = "type", Target = "Fonibo.Identity.Extensions.ClaimsIdentityExtension")]
person TheMisir    schedule 19.07.2020

Щелкните правой кнопкой мыши ошибку на вкладке списка ошибок, и вы можете выбрать «В источнике» или «В файле подавления».

SuppressMessageAttibute будет добавлен к исходному коду (метод или уровень класса), если вы выберете «В источнике».

«[assembly: SUppressMessage» будет добавлен в файл GlobalSupressions.cs, и вы сможете настроить «Цель» атрибута.

здесь

person angas liu    schedule 21.11.2017
comment
К сожалению, не все сообщения/предупреждения/ошибки в списке ошибок можно подавить. По-видимому, меню «Подавить» › «В исходном коде»/«В глобальном подавлении» появляется только для сообщений/предупреждений/ошибок, полученных из IntelliSense, а не для сообщений/предупреждений/ошибок времени сборки. - person Dai; 10.05.2020

Это не совсем то, чего вы хотите, но может быть меньшим злом, чем ваша ситуация.

Вы можете указать анализу кода игнорировать определенный класс с помощью следующего атрибута:

[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]

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

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

person Spritely    schedule 07.07.2016
comment
ExcludeFromCodeCoverage указывает, что атрибутированный код должен быть исключен из информации о покрытии кода; не из анализа кода. См. документацию MSDN (msdn.microsoft.com/en-us/library/) - person Ɖiamond ǤeezeƦ; 10.02.2018