【问题标题】:Too many false positives when using FxCop使用 FxCop 时误报太多
【发布时间】:2010-05-27 08:54:32
【问题描述】:

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

还有关于这些方法中使用的成员变量的错误报告。此外,泛型类型也存在问题(我什至在 MS connect 中看到了一些相关内容)。

无论如何,我想知道是否有人知道微软是否要升级FxCop,因为它似乎在1.36版本中停留了很长时间。

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

也许任何人都可以提出一个好的替代 FxCop 的方法?

我们使用的是VS2008 pro。

谢谢。

【问题讨论】:

  • StyleCop 的存在目的与 FxCop 不同,因此它并不真正相关。

标签: fxcop


【解决方案1】:

看看Gendarme,它很像 fxCop,但来自 Mono 项目。

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

【讨论】:

    【解决方案2】:

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

    默认建议超过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】:

    Visual Studio 现在带有代码分析功能 - 内置 FXCop:

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

    如果 FXCop 不符合您的要求,您可以在其中写入 custom rules。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 谢谢。我们确实关闭了许多规则,但我不想禁用指示未使用私有代码的规则。但是,这是误报最多的规则。
      • FxCop,就像其他任何东西一样,并不完美,但在大多数情况下,使用它的好处大于坏处。重要的是要考虑默认规则并不适合所有人,并且需要根据您的需要调整规则集。有时这是一个棘手的平衡行为,但就像我说的,我认为最后是值得的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      相关资源
      最近更新 更多