2011-06-15 26 views
1

我正在使用Common.Logging for .NET。當我使用DebugFormat或InfoFormat等XXXFormat函數之一時,出現CA1305警告。通過右擊並壓縮代碼或添加到項目抑制文件中可以很容易地進行抑制。我想在GlobalSuppressions.cs中添加一行以禁止所有對DebugFormat調用的警告(以及InfoFormat,TraceFormat等的單獨行)。到目前爲止,我無法弄清楚如何去做。當我用鼠標右鍵單擊該警告並選擇抑制信息 - >在項目鎮壓文件,這就是被添加:爲調試格式InfoFormat和類似調用抑制CA1305

[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的調用。我嘗試刪除目標並將範圍更改爲「模塊」(和「程序集」 - 不知道這是否有效),但我仍然無法得到此警告抑制所有出現的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",)] 

有誰知道如何做到這一點?

謝謝。

回答

2

不幸的是,現有的FxCop版本不支持像這樣的分層抑制。每個違反規則的實例都需要一個相應的SuppressMessageAttribute實例。如果您不想使用該規則,請將其禁用。如果你不希望它適用於某些方法,你基本上有三種選擇:

  1. 添加抑制對每次違規,
  2. 被忽略要忽略方法自定義規則替換規則,或
  3. 而不是直接調用這些方法,更改您的代碼以調用應用正確文化的外觀方法。

就個人而言,我會選擇#3,但情況因人而異...

+0

感謝您的信息。 – wageoghe 2011-06-21 19:52:30