2012-02-29 109 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,不檢查自動生成的代碼(適當的複選框設置爲選中)。

相關問題