1

c#/.net/fxcop!

...クラス内で、FxCopに文句を言って黙ってもらいたい

Warning CA1062 : Microsoft.Design : 
In externally visible method 'xyz', validate parameter 'a' before using it. 

if (a == null) throw new ArgumentNullException("a");基本的に、このルールは、コード内のほぼすべてのメソッドの先頭にa を配置することを示唆しています。これは、例外処理ロジックを吸って変更します。

だから、私はこれを私のクラス本体のどこかに入れました:

[SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods",
     Scope = "Type", 
     MessageId = "0", 
     Justification = "We love danger... so far.")]

とにかく、これは単一のメッセージを抑制することさえありません-私はまだこれらすべての警告を受け取ります. 間違いやすいメソッド定義の 1 つの真上にある場合にのみ警告を抑制します (つまり、このタイプのすべてではなく、1 つの警告のみを抑制します)。奇妙なことに、私のクラスで何度も発生する他の問題でも同じ構文が機能します。

私は何が間違っているのか分かりません。率直に言って、属性パラメーターの使用方法を本当に理解していません.. http://msdn.microsoft.com/de-de/library/ms244717.aspxは詳細に行き過ぎる。:T ...とにかく、何が正しくないか何か考えはありますか?

4

1 に答える 1

4

すべてのクラスのメッセージを抑制しますか、それとも単一のクラスのみを抑制しますか?前者の場合、ルールを無効にすることができます。(これを行うための正確なメカニズムは、FxCopの実行方法によって異なるため、これについてサポートが必要な場合は詳細を提供してください。)

後者の場合、少なくとも問題が検出されたメソッドごとにSuppressMessage属性を追加する必要があります。これは、FxCopが違反のターゲットに対する抑制のみを検索するためです。「親」要素(例:メソッドが属するクラス)に追加された抑制は、違反が抑制されているかどうかを判断しようとするときにFxCopによって検査されることはありません。

Target属性を使用する場合、コード内のどこに抑制を配置するかに関してある程度の柔軟性がありますが、これによって違反ターゲットごとに1つの抑制属性の必要性が変わることはありません。

于 2011-04-27T15:59:49.797 に答える