19

私がFxCopで作業しているプロジェクトでは、Windowsフォームデザイナによって生成されたInitializeComponent()メソッドで多くの(つまり400を超える)エラーが表示されます。これらのエラーのほとんどは、ラベルのTextプロパティの割り当てにすぎません。

ソースでこれらのメソッドを抑制したいので、FxCopによって生成された抑制コードをAssemblyInfo.csにコピーしましたが、機能しません。

これは、FxCopがクリップボードにコピーした属性です。

[module: SuppressMessage("Microsoft.Globalization",
    "CA1303:DoNotPassLiteralsAsLocalizedParameters",
    Scope = "member",
    Target = "WindowsClient.MainForm.InitializeComponent():System.Void",
    MessageId = "System.Windows.Forms.Control.set_Text(System.String)")]

このメッセージを抑制するための正しい属性を知っている人はいますか?

PS:Visual Studio 2005、C#、FxCop1.36ベータ版を使用しています。

4

3 に答える 3

18

おそらく正しいコードがありますが、プロジェクトのプロパティにプリコンパイラで定義されたシンボルとしてCODE_ANALYSISを追加する必要もあります。これらのSuppressMessage属性は、CODE_ANALYSISが定義されている場合にのみ、コンパイルされたバイナリに残されると思います。

于 2008-08-30T01:37:11.273 に答える
4

FxCop 1.36では、実際には[スペルと分析]タブに、生成されたコードの分析を抑制するプロジェクトオプションがあります。

生成されたすべてのコードの分析をオフにしたくない場合は、条件付きコンパイルシンボルのリスト(プロジェクトプロパティ、[ビルド]タブ)にCODE_ANALYSISシンボルを追加する必要があります。このシンボルが定義されていない場合、SupressMessage属性はコンパイルされたコードから削除されるため、FxCopはそれらを認識しません。

SuppressMessage属性のもう1つの問題は、特定のメソッド名(この場合はWindowsClient.MainForm.InitializeComponent():System.Void)の「ターゲット」をリストし、特定の「スコープ」をリストしていることです。これらを削除してみてください。それ以外の場合は、このSuppressMessageをメソッドの各インスタンスに追加する必要があります。

また、FxCop1.36のRTMバージョンにアップグレードする必要があります。ベータ版は新しいバージョンを自動的に検出しません。

于 2008-08-30T01:57:48.807 に答える
2

モジュールレベルの抑制メッセージは、名前空間宣言の前またはassemblyinfo.csでFxCopエラーを発生させているコードと同じファイルに貼り付ける必要があります。さらに、CODE_ANALYSISを条件付きコンパイラシンボルとして定義する必要があります([プロジェクト]>[プロパティ]>[ビルド])。それが整ったら、プロジェクトの完全な再構築を行い、次にFxCopを実行するときに、エラーを[ソースで除外]タブに移動する必要があります。

また、小さなヒントが1つありますが、FxCopの除外を多数処理している場合は、それらを邪魔にならないように、それらの周りに領域をラップすると便利な場合があります。

于 2008-08-30T01:52:50.533 に答える