Анализ кода 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>
Смотрите пошаговое пошаговое руководство: