Как подавить анализ кода stylecop / fxcop / visual studio для автоматически сгенерированного файла?

У меня есть код C #, созданный из ANTLR. Как мне сказать, что stylecop / fxcop / visual studio code analysis игнорирует этот файл при проверке?


person prosseek    schedule 29.02.2012    source источник


Ответы (3)


Для FxCop окончательный метод - украсить ваш код атрибутом [GeneratedCode] и отключить возможность проверки сгенерированного кода. Детали различаются между версиями VS и / или FxCop; см. это сообщение в блоге для правильное использование атрибутов.

StyleCop игнорирует этот атрибут, но у вас есть несколько других вариантов:

  • Назовите свой файл «Whatever.Designer.cs» и установите этот параметр в файле StyleCop.settings.
  • Включите заголовок XML в файл, который где-нибудь содержит <auto-generated />.

Кроме того, самые последние версии обоих инструментов, похоже, игнорируют код, который находится внутри области, в названии которой есть фраза «сгенерированный код». Например, в файлах Windows Forms * .Designer.cs вы увидите следующее:

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent ( )
{
    // stuff here
}

#endregion

Анализ кода и StyleCop, оба игнорируют код в этой области, но все равно будут работать с оставшейся частью этого файла. (Если у вас установлен параметр «Игнорировать файлы дизайнера», конечно, StyleCop проигнорирует весь файл, потому что он заканчивается на .Designer.cs.)

Очень досадно, что эти два инструмента не могут прийти к согласию относительно того, как игнорировать код (почти так же неприятно, как количество автоматически сгенерированного кода, который не пытается должным образом исключить себя - глядя на вас, EF). Проблема , заключается в том, что анализ кода проверяет ваш скомпилированный код (который имеет метаданные атрибутов, но без комментариев), а StyleCop проверяет исходный код (где объем атрибутов метаданных трудно отслеживать, хотя это все еще возможно).

В своих шаблонах я обычно использую несколько вариантов: я включаю в него заголовок, поддерживающий StyleCop, с тегом <auto-generated>, а затем украшаю каждый элемент кода с помощью [GeneratedCode], и он, кажется, улавливает все. (Возможно, само собой разумеется, что мой автогенерированный код также очень старается не нарушать правила в первую очередь :))

person Michael Edenfield    schedule 29.02.2012

Другой метод может использовать @headers.

@lexer::header {
    #pragma warning disable 1591
}

@parser::header {
    #pragma warning disable 1591 
}
person prosseek    schedule 06.03.2012

Что ж, я заметил, что файлы, сгенерированные ANTLR, являются «частично», поэтому я просто создал второй файл, добавил тот же класс также как «частично» без класса, имеющего какое-либо поле или метод, но добавил к классу следующий атрибут:

[GeneratedCodeAttribute ("ANTLR", "3.0.0.0")]

Затем я проверил этот файл в системе управления версиями TFS. Таким образом, у класса есть сгенерированный набор атрибутов кода, и CodeAnalysis / FxCop проигнорирует весь класс. Но вам нужно будет настроить CodeAnalysis, чтобы не проверять автоматически сгенерированный код (установлен соответствующий флажок).

person brighty    schedule 20.07.2016