基于功能的过滤规则

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 团队将来可以解决这个问题...

以上是关于基于功能的过滤规则的主要内容,如果未能解决你的问题,请参考以下文章

推荐算法之模型协同过滤(1)-关联规则

tcpdump 协议过滤哪些协议

个性化推荐系统原理介绍(基于内容过滤/协同过滤/关联规则/序列模式)

iptables原理及规则

Wireshark-BPF过滤规则

日志提取过程中过滤规则的python实现(类似logstash过滤器的功能)