2013-02-13 83 views
1

我剛剛就Service ReferencesXml summary errors詢問了有關自動生成代碼的類似question。答案已發佈,表明我可以將Service Reference添加到自己的項目中,然後完全避免Xml彙總警告和Stylecop錯誤。Stylecop爲Reference.cs文件抑制錯誤

但我意識到,我能夠通過設置來Service ReferenceInternal繞過Xml問題,我現在貼在StyleCop錯誤。

我正在使用FxCop版本10.0。

在我的項目的屬性,在代碼分析選項卡上,我已檢查了選項

從生成的代碼 (只有管理)

此外,從看

禁止結果生成的代碼在Reference.cs文件中,我看到該代碼裝飾有以下屬性:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] 

..whi ch Stylecop應該跳過,對嗎?雖然這不起作用,但我仍然在爲生成的代碼獲取StyleCop錯誤。

編輯:下面的頭還可以在生成的代碼中發現:

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by a tool. 
//  Runtime Version:4.0.30319.18033 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

那麼,爲什麼是不是被忽略了?

我也發現了這個question並用我的StyleCop setings以下嘗試:

<CollectionProperty Name="GeneratedFileFilters"> 
    <Value>Reference\.cs$</Value> 
</CollectionProperty> 

但這也不管用,我一直在努力與正則表達式,但嘗試下面的值添加到上面的例子讓Stylecop忽略我生成的代碼。

Reference.cs 
\Reference\.cs 
\Reference\.cs$ 
Reference\.cs$ 

有誰知道如何抑制所有Stylecop錯誤的Reference.cs文件?

EDIT2:顯示爲Reference.cs文件中的錯誤:

錯誤1個CA1812:Microsoft.Performance:...是一個內部類, 顯然從來沒有實例化。如果是這樣,請從 組件中刪除代碼。如果此類只包含靜態方法,則 考慮添加一個私有構造函數以防止編譯器從 生成默認構造函數。

錯誤2 CA2239:Microsoft.Usage:添加 'OnDeserialized私人無效 (的StreamingContext)' 方法鍵入...並與System.Runtime.Serialization.OnDeserializedAttribute屬性它 。

錯誤4 CA1811:Microsoft.Performance:...似乎沒有 上游公共或受保護的呼叫者。

我有這3種類型的錯誤中的27個。

編輯3:我有Style/Fx警察設置運行構建。我在Build Events選項卡中添加在構建選項卡中的條件編譯符號CODE_ANALYSIS

"$(ProgramFiles)\Microsoft FxCop 10.0\FxCopCmd.exe" /file:"$(TargetPath)" /ruleid:-"Microsoft.Design#CA1006" /ruleid:-"Microsoft.Design#CA1020" /console /cul:en-GB /q /assemblyCompareMode:StrongNameIgnoringVersion 

...在Post-build event command line

+0

你能否詳細說明你所看到的錯誤? – Mightymuke 2013-02-14 20:57:58

+0

@Mightmuke,請參閱編輯2 – DevDave 2013-02-15 11:08:19

+0

當我選擇「從生成的代碼中取消結果」選項時,它似乎可以正常工作(儘管我沒有括號中的文字,我在想如何以及爲什麼會出現這種情況) 。你是從IDE(又名代碼分析)還是從FxCop跑步者運行?如果來自IDE,你有幾個項目?從IDE運行時出現問題,因爲第一個項目的代碼分析設置會覆蓋「子」項目的設置(至少在VS2010中)。如果你只有一個項目,這當然不會成爲問題。 – Mightymuke 2013-02-15 18:03:30

回答

4

CAxxxx錯誤來自FxCop,而不是StyleCop。如果它們出現在生成的代碼中,並且您希望在不更改生成器的情況下保留生成的代碼,只需添加項目級別的排除(例如:在GlobalSuppressions.cs中)。

以下問題編輯#3: 既然你正在運行fxcopcmd.exe「手動」,你的C#項目設置爲忽略生成的代碼不被使用的。您需要將/ignoregeneratedcode切換器添加到您的fxcopcmd.exe命令行以使其適用。

+0

有沒有辦法,用FxCop跳過生成的文件,而不必爲每個錯誤寫抑制? – DevDave 2013-02-15 15:37:50

+0

如果你已經設置FxCop忽略生成的代碼,那麼你從這方面做了大量的工作。我無法重現這個問題,但我無法確定這是因爲我的服務參考不同還是您的FxCop配置錯誤。當您看到CA警告時,您如何運行FxCop? – 2013-02-15 15:42:59

+0

有沒有一種方法可以忽略fxCop生成的代碼,而不是我所包含的示例? – DevDave 2013-02-15 16:14:59