【问题标题】:Filtering rules based on functionality基于功能的过滤规则
【发布时间】:2013-01-11 20:34:43
【问题描述】:

我很确定我要问的问题是不可能的,但我希望代码分析专家能够提出解决方法。

我正在尝试根据功能找到一种方法来排除 GlobalSuppressions.cs 中的代码分析警告。例如,我想禁用

"Microsoft.Globalization", "CA1305:SpecifyIFormatProvider"

在我的日志语句的 ****all**** 中(我使用 CommonLogging 外观),因此签名将类似于:

Common.Logging.ILog.Trace(System.Action<Common.Logging.FormatMessageHandler>)

无论类型、命名空间或方法名称如何,我都希望在整个项目的任何地方都这样做......

看着otheranswers,这在现在看来是不可能的……或者是吗?

【问题讨论】:

    标签: visual-studio-2012 code-analysis fxcop suppress-warnings suppressmessage


    【解决方案1】:

    这确实是不可能的。当您调用的方法同时具有接受string 的重载和接受string, IFormatProvider 的重载时,将触发此规则。它可能应该,因为我希望您想要文化敏感或文化不敏感的日志文件。在这种情况下,代码分析会迫使您做出选择。

    您可以做的是编写自己的规则并禁用此规则。或者您可以修复违规行为并将它们排除在外。快速的正则表达式搜索+替换可能会在几秒钟内为您解决这些问题。

    或者您可以编写一个类作为您的代码和 Common.Logging 代码之间的代理/外观,并且只接受 string 变体。然后,您可以重构代码以使用您的方法。这样,您只需修复一个违规行为,该违规行为将保留在新创建的外观中。

    【讨论】:

    • 嗯...写一个外观来记录外观只是为了逃避 CA 是一种选择,但不确定这是否是一种矫枉过正的做法。太糟糕了,您不能禁用基于正则表达式的规则。并且进行搜索和替换是合理的,但它会使日志记录语句看起来非常冗长(它们已经与所有延迟执行 lambdas 一起使用,即 Logger.Debug(msg => msg("Hello {0}", "World")); ....希望 CA 团队将来可以解决这个问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2020-05-28
    • 2011-03-31
    相关资源
    最近更新 更多