1

Common.Loggingfor.NETを使用しています。DebugFormatやInfoFormatなどのXXXFormat関数のいずれかを使用すると、CA1305警告が表示されます。右クリックして、コードで抑制するか、プロジェクト抑制ファイルに追加するかを指定することで、抑制するのは簡単です。GlobalSuppressions.csに1行追加して、DebugFormatへのすべての呼び出し(およびInfoFormat、TraceFormatなどの個別の行)でこの警告が発生するのをすべて抑制したいと思います。これまでのところ、私はそれを行う方法を理解することはできません。警告を右クリックして[メッセージの抑制]->[プロジェクト抑制ファイル]を選択すると、次のように追加されます。

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "Common.Logging.ILog.DebugFormat(System.String,System.Object[])", Scope = "member", Target = "My.Full.Namespace.Class.#MyFunctionName(int)")]

ご覧のとおり、抑制により、メッセージを抑制するためのアセンブリレベルの属性が作成されました。属性自体の中で、スコープは「メンバー」に設定され、ターゲットは名前空間で修飾されたクラス名「ドット」メソッドシグネチャに設定されます。これは確かにその関数でのDebugFormatの呼び出しのメッセージを抑制しますが、DebugFormatのすべての呼び出しのメッセージを抑制したいと思います。ターゲットを削除し、スコープを「モジュール」(および「アセンブリ」-それが有効かどうかはわかりません)に変更しようとしましたが、DebugFormatのすべての発生に対してこの警告を抑制できません。

理想的には、少なくともこれらのエントリ(または同様のもの)を含むGlobalSuppressions.csファイルを作成したいと思います。

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "Common.Logging.ILog.TraceFormat(System.String,System.Object[])", Scope = "module",)] 
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "Common.Logging.ILog.DebugFormat(System.String,System.Object[])", Scope = "module",)] 
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "Common.Logging.ILog.InfoFormat(System.String,System.Object[])", Scope = "module",)] 
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "Common.Logging.ILog.WarnFormat(System.String,System.Object[])", Scope = "module",)] 
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "Common.Logging.ILog.ErrorFormat(System.String,System.Object[])", Scope = "module",)] 
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "Common.Logging.ILog.FatalFormat(System.String,System.Object[])", Scope = "module",)] 

誰かがこれを行う方法を知っていますか?

ありがとう。

4

1 に答える 1

2

残念ながら、このような階層的な抑制は、既存の FxCop バージョンではサポートされていません。各ルール違反インスタンスには、対応する SuppressMessageAttribute インスタンスが必要です。ルールを使用しない場合は、無効にします。特定のメソッドに適用したくない場合は、基本的に次の 3 つのオプションがあります。

  1. 違反ごとに抑制を追加し、
  2. ルールを、無視したいメソッドを無視するカスタム ルールに置き換えるか、または
  3. これらのメソッドを直接呼び出す代わりに、正しいカルチャを適用するファサード メソッドを呼び出すようにコードを変更してください。

個人的には #3 を選びますが、ymmv...

于 2011-06-16T01:17:16.443 に答える