Анализ кода VS2010. Подавить сообщение CA1051:DoNotDeclareVisibleInstanceFields для всех членов класса

У меня есть такой класс:

public class Foo
{
    public readonly int A = 1;
    public readonly int B = 2;
}

Когда я запускаю VS2010, встроенный в инструмент анализа кода, я получаю 2 идентичных предупреждения: это "поле"... "видно вне его декларирующего типа, меняем его доступность на private и добавляем свойство с той же доступностью, что и у поля В настоящее время, чтобы обеспечить доступ к нему".

Я хочу подавить это предупреждение для всех полей в моем классе Foo, но я не хочу отмечать каждое поле атрибутом SuppressMessage следующим образом:

public class Foo
{
    [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
    public readonly int A = 1;
    [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
    public readonly int B = 2;
}

Я хочу пометить всех членов класса, используя такой код:

[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
public class Foo
{
    public readonly int A = 1;
    public readonly int B = 2;
}

Но этот код не работает, я все еще получаю предупреждение анализа кода. Как я могу сделать это правильно?

2 ответа

Решение

Невозможно подавить более 1 сообщения одновременно, используя SuppressMessageAttribute.

Как обсуждение можно найти здесь, но соответствующая часть:

Вы сталкиваетесь с распространенным недоразумением о SuppressMessage.

Каждый раз, когда вы помещаете SuppressMessage в исходный файл, вы подавляете ровно одну проблему (одну "строку" в сетке). Период.

Сообщение SuppressMessage может быть размещено "рядом" с нарушением или на уровне модуля. Уровень модуля, уровень сборки и глобальное подавление означают одно и то же. Размещая на уровне модуля, вы не подавляете сразу несколько случаев проблемы. Вы просто можете найти SuppressMessage в другом месте кода. Основное преимущество заключается в том, что вы можете, например, собрать все подавления, связанные со сборкой, в один файл (например, GlobalSuppressions.cs).

Когда вы используете SuppressMessage на уровне модуля, вы должны указать цель. Цель должна точно соответствовать тому, что сообщается в графическом интерфейсе для нарушения правила.

Невозможно использовать SuppressMessage для подавления правила для всей области видимости класса или всей области имен.

Вы можете создать файл правил CodeAnalysis с набором правил, таких как:

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0">
  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis"
         RuleNamespace="Microsoft.Rules.Managed">
    <Rule Id="CA1111" Action="Ignore" />
  </Rules>
</RuleSet>

Смотрите пошаговое пошаговое руководство:

Другие вопросы по тегам