如何抑制自动生成文件的stylecop / fxcop / visual studio代码分析?

时间:2012-02-29 15:57:41

标签: visual-studio-2010 antlr stylecop

我有从ANTLR生成的C#代码。如何判断stylecop / fxcop / visual studio代码分析在检查时忽略此文件?

3 个答案:

答案 0 :(得分:3)

对于FxCop,最终方法是使用[GeneratedCode]属性修饰代码并禁用检查生成代码的选项。 VS和/或FxCop版本的细节不同;请参阅此correct usage of the attributes的博文。

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

Code Analysis和StyleCop都会忽略该区域内的代码,但仍然会针对此文件的其余部分运行。 (如果您设置了“忽略设计器文件”选项,当然,StyleCop将忽略整个文件,因为它以.Designer.cs结尾。)

令人非常沮丧的是,这两个工具似乎无法就如何忽略代码达成一致(几乎与自动生成代码的数量一样令人沮丧,因为这些代码无法正常排除自己 - 在这里看着你,EF。 )问题是代码分析检查您的编译代码(具有属性元数据但没有注释),而StyleCop检查您的源代码(元数据属性的范围更难跟踪,尽管它仍然可能)。

在我的模板中,我倾向于使用多种选项:我在其中包含一个带有<auto-generated>标记的StyleCop感知标头,然后用[GeneratedCode]装饰每个代码元素,它似乎抓住一切。 (可能不言而喻,我的自动生成的代码也很难在第一时间内违反规则​​:))

答案 1 :(得分:1)

另一种方法可能是使用@headers。

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

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

答案 2 :(得分:1)

嗯,我注意到ANTLR生成的文件是部分&#39;所以我刚刚创建了第二个文件,添加了相同的类,部分&#39;没有具有任何字段或方法的类,但在类中添加了以下属性:

[GeneratedCodeAttribute(&#34; ANTLR&#34;,&#34; 3.0.0.0&#34;)]

然后我检查了这个文件,进入TFS源代码控制。像这样,类具有生成的代码属性集,CodeAnalysis / FxCop将忽略整个类。但是您必须配置CodeAnalysis,以便不检查自动生成的代码(设置为选中的相应复选框)。