Анализ кода VS2010.Подавить сообщение CA1051: DoNotDeclareVisibleInstanceFields для всех членов класса - PullRequest
5 голосов
/ 17 августа 2011

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

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 ]

10 голосов
/ 17 августа 2011

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

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

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

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

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

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

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

1 голос
/ 17 августа 2011

Вы можете создать файл правил 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>

См. Пошаговое руководство:

...