2012-02-29 86 views

回答

3

对于FxCop,权威性方法是用[GeneratedCode]属性修饰您的代码并禁用选项以检查生成的代码。 VS和/或FxCop版本的细节有所不同;看到这篇博文correct usage of the attributes

了StyleCop忽略属性,但你有一些其他选项:

  • 文件命名为“Whatever.Designer.cs”,并设置在StyleCop.settings文件选项。
  • 在包含<auto-generated />的文件中包含一个XML标头。

此外,这两个工具的最新版本似乎忽略在其名称中包含短语“生成的代码”的区域内的代码。例如,在你的Windows窗体*了.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检查你的源代码(其中元数据属性的范围很难跟踪,尽管它仍然是可能的)。

在我的模板,我倾向于使用的选项的混合物:包括我在它与<auto-generated>标签了StyleCop感知头,然后装点每个码元与[GeneratedCode],它似乎赶上了一切。 (可能不用说,我的自动生成的代码也很难不违反规则:) :)

0

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

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

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

好,我注意到ANTLR生成的文件是“部分”,所以我刚创建的第二文件,添加了相同的类也为“部分”,而无需任何字段或方法,所述类,但添加的以下属性的类:

[GeneratedCodeAttribute( “ANTLR”, “3.0.0.0”)]

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

相关问题