为DebugFormat InfoFormat和类似的调用取消CA1305

时间:2011-06-15 21:32:55

标签: logging code-analysis fxcop suppress-warnings suppress

我正在使用Common.Logging for .NET。当我使用其中一个XXXFormat函数(如DebugFormat或InfoFormat)时,我收到CA1305警告。通过右键单击以及在代码中禁止说明或添加到项目抑制文件来抑制它是很容易的。我想在GlobalSuppressions.cs中添加一行,以便对所有对DebugFormat的调用(以及InfoFormat,TraceFormat等的单独行)抑制所有出现此警告。到目前为止,我无法弄清楚如何做到这一点。当我右键单击警告并选择抑制消息 - >在Project Suppressions文件中,这是添加的内容:

[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)")]

如您所见,抑制已创建一个程序集级别属性来抑制消息。在属性本身内,Scope设置为“member”,Target设置为命名空间限定classname“dot”方法签名。这确实会抑制在该函数中调用DebugFormat的消息,但是我想要禁止所有对DebugFormat的调用的消息。我已经尝试删除Target并将Scope更改为“module”(和“assembly” - 不确定它是否有效),但我仍然无法在所有出现的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",)] 

有谁知道怎么做?

感谢。

1 个答案:

答案 0 :(得分:2)

不幸的是,现有的FxCop版本不支持这样的分层抑制。每个规则违规实例都需要相应的SuppressMessageAttribute实例。如果您不想使用该规则,请将其禁用。如果您不希望它适用于某些方法,您基本上有三个选项:

  1. 为每次违规添加抑制
  2. 使用忽略您要忽略的方法的自定义规则替换规则,或
  3. 不要直接调用这些方法,而是将代码更改为调用应用正确文化的Facade方法。
  4. 就个人而言,我会选择#3,但是ymmv ......