使用FxCop时出现过多误报

时间:2010-05-27 08:54:32

标签: fxcop

我们正在使用FxCop,它会产生太多我们喜欢的误报。例如,如果使用反射调用私有方法,则报告此方法可能未使用 - 可理解,并且我们使用SuppressMessage属性显式禁止此警告。但是,FxCop报告了从该方法调用的方法的相同警告,我们已经抑制了该方法的警告。这是愚蠢的,会产生太多的噪音。

还有关于这些方法中使用的成员变量的错误报告。此外,泛型类型存在问题(我甚至在MS连接中看到了一些关于它的东西)。

无论如何,我想知道是否有人知道微软是否会升级FxCop,因为它似乎长期陷入版本1.36。

顺便说一句,我不使用StyleCop,因为它太挑剔了,我们只是没有时间检查所有的消息,以便全部压制它们。此外,StyleCop报告似乎在增强,而非取代FxCop。

也许有人可以建议一个替代FxCop的好方法吗?

我们正在使用VS2008专业版。

感谢。

4 个答案:

答案 0 :(得分:4)

看看Gendarme,它与fxCop很相似,但是来自Mono项目。

  

Gendarme是一个可扩展的基于规则的工具,用于查找.NET应用程序和库中的问题。 Gendarme检查包含ECMA CIL格式(Mono和.NET)代码的程序和库,并查找代码的常见问题,编译器通常不检查或历史未检查的问题。    - http://www.mono-project.com/Gendarme

答案 1 :(得分:1)

FxCop的替代方法是使用允许编写Code Rules over C# LINQ Queries (namely CQLinq)的工具NDepend。 免责声明:我是该工具的开发人员之一

默认情况下会提出超过200 code rules的内容。由于众所周知的 C#LINQ语法,自定义现有规则或创建自己的规则非常简单。

为了保持较低的误报率,CQLinq提供了独特的功能,可以通过前缀为 notmycode 的特殊代码查询来定义集合 JustMyCode 的内容。有关此功能的更多说明可以在here找到。以下是两个 notmycode 默认查询:

为了保持较低的误报率,使用CQLinq,您还可以将规则结果仅集中在添加的代码或重构的代码上,因为定义了baseline in the past。请参阅以下规则,该规则检测自基线以来添加或重构过于复杂的方法:

warnif count > 0 
from m in Methods
where m.CyclomaticComplexity > 20 &&
      m.WasAdded() || m.CodeWasChanged()
select new { m, m.CyclomaticComplexity }

最后,请注意,使用NDepend代码规则可以live in Visual Studio验证generated HTML+javascript report并在构建处理时验证{{3}}。

答案 2 :(得分:0)

Visual Studio现在提供代码分析 - 内置FXCop:

  

Microsoft Visual Studio 2005年和2005年   Visual Studio 2008团队系统   开发版都包括   “代码分析”,基于   的FxCop。

如果FXCop不能做到你想要的,你可以在FXCop中写custom rules

答案 3 :(得分:0)

如果使用FxCop项目文件,则可以关闭规则和规则组。这有点严厉,但如果特定的规则导致你的问题,或者根本不适用,这就是要走的路。它可以节省您注释代码的时间。值得回顾一下产生结果的每条规则,并决定它是否适用于你。

对于它的价值,FxCop team are working on an update。我想这需要一段时间,因为正在使用new code analysis engine