5

我有這樣一個類:VS2010代碼分析。禁止消息CA1051:DoNotDeclareVisibleInstanceFields所有類成員

public class Foo 
{ 
    public readonly int A = 1; 
    public readonly int B = 2; 
} 

當我運行內置的代碼分析工具VS2010,我得到相同的警告: 那場「 ...'在其聲明類型之外是可見的,將其可訪問性更改爲私有,並添加一個屬性,具有與當前字段相同的可訪問性,以提供對其的訪問'。

我希望抑制在我的課此警告的所有領域,但我不想用標記每SuppressMessage區段屬性是這樣的:

public class Foo 
{ 
    [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] 
    public readonly int A = 1; 
    [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] 
    public readonly int B = 2; 
} 

我想,以紀念所有類成員,使用這樣的代碼:

[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] 
public class Foo 
{ 
    public readonly int A = 1; 
    public readonly int B = 2; 
} 

但是這段代碼不起作用,我仍然得到一個代碼分析警告。 我該如何正確地做到這一點?

+0

我認爲你發現了一個錯誤,發佈到connect.microsoft.com – 2011-08-17 13:11:32

+0

關於它的任何最終解決方案? – Kiquenet 2013-02-05 07:04:20

回答

10

使用SuppressMessageAttribute,無法一次抑制超過1條消息。

正如討論可以發現here,但相關的部分是:

您正在運行到約SuppressMessage一個普遍的誤解。

每次將SuppressMessage放入源文件中時,都會嚴禁一個問題(網格中的一個「行」)出現 。期。

SuppressMessage可以放置在違規位置附近或位於 模塊級別。模塊級,彙編級和全局抑制 都意味着同樣的事情。通過放置在模塊級別,您不會一次性抑制多個問題的實例。您只需到 找到SuppressMessage在代碼的不同位置。好處是,您可以在單個文件中收集與程序集相關的所有抑制 (例如, GlobalSuppressions.cs)。

當您使用模塊級別SuppressMessage時,您必須指定 目標。 Target必須與GUI中報告的 違反規則完全匹配。

無法使用SuppressMessage抑制整個範圍的類或命名空間的整個範圍的規則。

+0

非常感謝!看來我真的無法正確理解SuppressMessage概念!你的回答幫了我很大的忙。現在我明白了。 – feorex 2011-08-19 05:53:21

1

您可以創建CodeAnalysis規則與一組像規則文件:一步演練

<?xml version="1.0" encoding="utf-8"?> 
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0"> 
    <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" 
     RuleNamespace="Microsoft.Rules.Managed"> 
    <Rule Id="CA1111" Action="Ignore" /> 
    </Rules> 
</RuleSet> 

見步驟:

相關問題