您如何从遗留代码上的 FxCop 开始?

Posted

技术标签:

【中文标题】您如何从遗留代码上的 FxCop 开始?【英文标题】:How do you start with FxCop on legacy code? 【发布时间】:2009-03-27 09:43:40 【问题描述】:

有没有人有任何将 FxCop 引入遗留代码的经验?如果有人引入违反规则的代码,我们希望我们的构建失败。但就目前而言,这是不可能的,因为遗留代码有超过 9000 次违规。

我所知道的抑制错误的唯一方法是通过 SuppressMessage 属性,但这仅适用于方法和 GeneratedCodeAttribute。最后一个可以用于类和命名空间(如果我没记错的话),但不应该用于非生成代码(参见here)。

目前,我们每天都会花一些时间来消除违规行为,但会不断引入新的违规行为,因为我们的构建不会失败。

有什么想法吗?

【问题讨论】:

【参考方案1】:

我也遇到过类似的情况。前段时间我开始在一个现有项目上使用 FxCop,一开始有很多错误。我所做的是关闭所有规则,然后一次打开一组,边走边解决错误。

安全性和性能组是一个很好的起点 - 他们帮助我发现了我以前没有意识到的问题。有些规则是主观的,可能并不完全适用于您的项目,如果有的话。例如,如果国际化不是问题,则关闭该组。如果有不适用于您的特定规则,例如命名规则,请将其关闭。

如果您设法清除了某个规则的一组错误,则可以将构建设置为在将来违反该规则时失败。所以不会出现新的错误。

如果是某个规模的项目,只需一次执行一条规则,查看规则的相关性/重要性,然后修复错误或关闭不适用的规则。

【讨论】:

【参考方案2】:

首先问自己:您是否愿意并且能够更改遗留代码以符合 FxCop 规则?或者换一种说法:这是打发时间的最佳方式吗?

如果您愿意花费时间和精力,请从挑选您认为对整体质量最重要的少数规则开始并实施这些规则。如果这有帮助,您可以添加一些规则、修复代码等。

根据我的经验,实施 FxCop 规则等没有大爆炸式的方法。唯一可行的方法是一次取一小块。

【讨论】:

【参考方案3】:

您可以为 FxCop 项目中的旧违规添加例外。这样您就无需向现有代码添加任何属性,并且您会收到有关所有新违规行为的警告。

为此,在 FxCop GUI 中创建一个项目,使用您的规则运行分析,然后在结果视图中选择您想暂时忽略的违规。右键单击并选择“排除”。选定的警告将移至“项目中排除”选项卡。当您准备好返回并修复它们时,选择并单击“标记为活动”。

这些排除项存储在 .FxCop 文件中。

不过,我还是建议逐步引入规则,以平滑每个人的学习曲线。

【讨论】:

您是如何做到这一点的?这是选项“不要针对修复是重大更改的遗留代码触发消息”吗?它似乎在 FxCop 1.36 beta(我们正在使用)中消失了。 FxCop 如何知道哪些违规行为是新的,哪些是旧的? 我在我的 FxCop 版本(我相信是 1.36)中没有看到您在谈论的选项。添加了关于“排除在项目中”的说明以发布。【参考方案4】:

下面的方法怎么样:

    使用与您的项目相关的所有规则运行 FXCop 将结果保存为基线 开发新代码 运行 FxCop 从基线中删除所有结果

这将导致 fxcop 检查您的新代码....

【讨论】:

以上是关于您如何从遗留代码上的 FxCop 开始?的主要内容,如果未能解决你的问题,请参考以下文章

如何将遗留的 Dojo Toolkit 代码转换为 AMD?

如何修复 FxCop 错误代码 512?

如何在源代码中创建具有正确行号的 FxCop Problem() 对象

你希望 FxCop/宪兵有啥规则?

如何在 Visual Studio 2008 的整个解决方案上运行 FxCop

fxcop 自定义规则 - 检查源代码以查找新关键字