Debugformat Infoformatおよび同様の呼び出しのCA1305を抑制します
-
28-10-2019 - |
質問
私は使っている .netのcommon.logging. 。 debugformatやinfoformatなどのxxxformat関数の1つを使用すると、 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のすべての発生に対してこの警告を抑制することはできません。
理想的には、少なくともこれらのエントリ(または同様)にこれらのエントリがある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",)]
誰かがこれを行う方法を知っていますか?
ありがとう。
解決
残念ながら、このような階層的抑制は既存のFXCOPバージョンではサポートされていません。各ルール違反インスタンスには、対応するsuptresmessageattributeインスタンスが必要です。ルールを使用したくない場合は、無効にしてください。特定の方法に適用したくない場合は、基本的に3つのオプションがあります。
- 違反ごとに抑制を追加し、
- ルールを無視したい方法を無視するカスタムルールに置き換えるか、
- これらのメソッドを直接呼び出す代わりに、コードを変更して、正しいカルチャーを適用するファサードメソッドを呼び出します。
個人的には、#3を選択しますが、YMMV ...