Игнорировать правила анализа кода в Visual Studio

Как игнорировать определенное правило анализа кода VS (скажем, CA1305: Microsoft.Globalization) в:

  • Метод?
  • Класс?
  • Пространство имен?

(Предположим, что все эти варианты возможны.)


person Alex Angas    schedule 18.09.2009    source источник
comment
Связано: stackoverflow.com/q/3683729/11410   -  person Benjol    schedule 28.02.2012


Ответы (3)


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

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2233:OperationsShouldNotOverflow", MessageId = "newValue+1", Justification = "The reason I think its acceptable in this case")]
void SomeMethod()
{
   // Some code that would normal cause this Code Analysis message
}

О методе, свойстве, типе и т.д.

person AnthonyWJones    schedule 18.09.2009
comment
@AnthonyWJones: я попробовал [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1305:Microsoft.Globalization")] (для краткости) для метода, но предупреждение все равно появилось. Любые идеи? - person Alex Angas; 18.09.2009
comment
@Alex: попробуйте изменить категорию на Microsoft.Globalization, см.: - msdn.microsoft .com/en-us/library/ms182190.aspx - person AnthonyWJones; 18.09.2009
comment
Вы можете попробовать запустить FxCop, щелкнуть правой кнопкой мыши ошибки и выбрать «Копировать как SuppressMessage». Это должно дать вам правильный текст атрибута. - person TrueWill; 18.09.2009
comment
Обратите внимание, что тогда вы должны скомпилировать с условием CODE_ANALYSIS. - person Frederik Gheysels; 21.09.2009

Используйте 1_

Вы можете поместить прагму в соответствующую область в исходном файле (т.е. класс, метод)

См. http://msdn.microsoft.com/en-us/library/2c8f766e(VS.80).aspx

person Stu Mackellar    schedule 18.09.2009
comment
Предупреждение #pragma работает с предупреждениями компилятора. Это также работает для анализа кода? - person OregonGhost; 18.09.2009
comment
Предупреждение @OregonGhost #pragma (подавить) было введено специально для анализа кода TFS. - person Stu Mackellar; 18.09.2009
comment
@JaredPar В вопросе не упоминается FxCop? - person Stu Mackellar; 18.09.2009
comment
@Stu говорит о предупреждениях анализа кода и упоминает конкретную категорию по имени (Microsoft.Globalization) - person JaredPar; 18.09.2009
comment
@Stu: я пробовал это с #pragma warning(suppress: CA1305) и безуспешно. Идеи? - person Alex Angas; 18.09.2009
comment
Из документов: подавление поддерживается только для предупреждений C6000 (предупреждения об анализе кода), которые включены с помощью параметра компилятора /analyze (Enterprise Code Analysis). Вместо этого вы можете использовать #pragme warning(disable) или, альтернативно, использовать атрибут SuppressMessage, как предлагает @AnthonyWJones. - person Stu Mackellar; 19.09.2009
comment
Кроме того: если директива предупреждения #pragma со спецификатором подавляющего предупреждения не подавляет предупреждение, это может быть связано с тем, что конкретное предупреждение применяется к телу функции в целом, а не к его отдельным операторам. Чтобы подавить предупреждения этого типа, такие как Warning 28195, поместите директиву предупреждения #pragma в строку, непосредственно предшествующую первой фигурной скобке ({) тела функции. - person Stu Mackellar; 19.09.2009

Я скачал FXCop, как было предложено в комментарии @TrueWill к ответу @AnthonyWJones. Это дало мне SuppressMessage:

[SuppressMessage("Microsoft.Globalization",
    "CA1305:SpecifyIFormatProvider",
    MessageId = "System.String.Format(System.String,System.Object)")]

Это было намного сложнее, чем должно было быть. Что случилось с интеграцией FXCop в Visual Studio? Спасибо ответившим за помощь.

person Alex Angas    schedule 21.09.2009
comment
Спасибо, а как отключить предупреждения StyleCop SA1307 и SA1305? - person Hamish Grubijan; 10.03.2011
comment
@Hamish: я не знаю о StyleCop. Возможно, вам придется задать новый вопрос для этого. - person Alex Angas; 10.03.2011
comment
Хорошо, я сделал это. На всякий случай, если кто-то еще найдет это полезным, вот ссылка на вопрос: stackoverflow.com/questions/5265154/ - person Hamish Grubijan; 10.03.2011