1

我正在为 .NET 使用 Common.Logging。当我使用 XXXFormat 函数(如 DebugFormat 或 InfoFormat)之一时,我收到CA1305警告。通过右键单击并说在代码中抑制或添加到项目抑制文件中很容易抑制。我想在 GlobalSuppressions.cs 中添加一行,以禁止所有对 DebugFormat 的调用出现此警告(以及 InfoFormat、TraceFormat 等的单独行)。到目前为止,我不知道该怎么做。当我右键单击警告并选择 Suppress Message -> In Project Suppressions file 时,添加的内容如下:

[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 设置为命名空间限定的类名“dot”方法签名。这确实抑制了该函数中调用 DebugFormat 的消息,但我想抑制所有调用 DebugFormat 的消息。我已尝试删除 Target 并将 Scope 更改为“模块”(和“程序集”-不确定这是否有效),但对于所有出现的 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 实例。如果您不想使用该规则,请将其禁用。如果您不希望它应用于某些方法,您基本上有三个选择:

  1. 为每个违规添加一个抑制,
  2. 将规则替换为忽略您要忽略的方法的自定义规则,或
  3. 不要直接调用这些方法,而是更改您的代码以调用应用正确文化的外观方法。

就个人而言,我会选择#3,但是ymmv ...

于 2011-06-16T01:17:16.443 回答