基于功能的过滤规则
Posted
技术标签:
【中文标题】基于功能的过滤规则【英文标题】: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,这在现在看来是不可能的……或者是吗?
【问题讨论】:
【参考方案1】:这确实是不可能的。当您调用的方法同时具有接受string
的重载和接受string, IFormatProvider
的重载时,将触发此规则。它可能应该,因为我希望您想要文化敏感或文化不敏感的日志文件。在这种情况下,代码分析会迫使您做出选择。
您可以做的是编写自己的规则并禁用此规则。或者您可以修复违规行为并将它们排除在外。快速的正则表达式搜索+替换可能会在几秒钟内为您解决这些问题。
或者您可以编写一个类作为您的代码和 Common.Logging 代码之间的代理/外观,并且只接受 string
变体。然后,您可以重构代码以使用您的方法。这样,您只需修复一个违规行为,该违规行为将保留在新创建的外观中。
【讨论】:
嗯...写一个外观来记录外观只是为了逃避 CA 是一种选择,但不确定这是否是一种矫枉过正的做法。太糟糕了,您不能禁用基于正则表达式的规则。并且进行搜索和替换是合理的,但它会使日志记录语句看起来非常冗长(它们已经与所有延迟执行 lambdas 一起使用,即 Logger.Debug(msg => msg("Hello 0", "World")); ....希望 CA 团队将来可以解决这个问题...以上是关于基于功能的过滤规则的主要内容,如果未能解决你的问题,请参考以下文章