我最近开始使用它。但是,在针对我公司最大的项目之一运行它之后。它出现了堆积如山的问题。
问题列表如此之多,如果不是全部的话,需要几天的时间才能找到并解决一些问题。
现在,我知道修复 FxCop 告诉您修复的所有内容并不是很实际。但是因为我是这个小工具的新手......
有效使用 FxCop 有哪些好的提示和技巧?
在新项目和现有项目上?
如果还提供我公司的程序员通常会写好代码?
我最近开始使用它。但是,在针对我公司最大的项目之一运行它之后。它出现了堆积如山的问题。
问题列表如此之多,如果不是全部的话,需要几天的时间才能找到并解决一些问题。
现在,我知道修复 FxCop 告诉您修复的所有内容并不是很实际。但是因为我是这个小工具的新手......
有效使用 FxCop 有哪些好的提示和技巧?
在新项目和现有项目上?
如果还提供我公司的程序员通常会写好代码?
起初,您可以从一小组规则开始。然后增加您应用的规则数量。
你也必须看看这个问题的答案......
通过运行一次 fxCop 并排除它找到的所有内容来创建基线。
将此保存为 .fxcop 文件并使用它来运行未来的检查。
然后,当您对代码进行更改时,您将创建新的、可管理的违规行为。例如,如果您更改方法的签名,FxCop 将重新标记事物。
如果您有时间,您可以通过取消排除它们来一次解决一类违规行为。
绝对过滤掉对您的组织不重要的那些。例如,整个国际化块对于我们的一个项目在很大程度上并不重要,因此我们只是将其排除在外,仅此一项就足以使列表易于管理。(在那个区块中有一些我们想要实施的很棒的建议,但它们当时对应用程序并不重要。)
您还可以创建一些 FxCop 项目,将异常分组,直到将数量减少到可管理的程度(“立即修复这些问题”、“尽快修复这些问题”、“随时修复这些问题”)。
我很确定我花了整整一周的时间排除/包括违规行为,直到我们有一个适合我们政策的列表。然后另一个 2-3 只是修复违规行为。:-(
FxCop 的特点是,它是针对特定用例设计的出色工具。它旨在帮助类库开发人员。因此,如果您是 Developer Express 或 Infragistics,并且您正在创建一个供全球开发人员使用的代码库,那么您需要良好的命名、良好的全球化和许多其他的东西。
因此,如果您将所有表单命名为 frmMain,FxCop 会抱怨,因为这在类库中看起来很难看。但是,如果您只是在开发内部 WinForms 应用程序,则不必在意。同样,您会为有关 IFormatProvider、指定文本方向的 MessageBox 重载等所有内容而发疯。但除非您正在为全球受众创建代码,否则您可以忽略这些。
重要的是要了解 FxCop 的目标受众。您可以根据您与该受众不同的方式忽略某些建议。
按规则类型对输出进行排序...然后通过排序列表查看损坏的规则类型的哪个子集是重要的并且值得修复 IYO。
并非 fxCop 报告的所有问题都是“必须解决”的问题。例如,使用字符串连接将用户输入插入数据库命令比匈牙利语或捕获异常等样式问题要糟糕得多,而不是更具体的异常。
FxCop 的替代方法是使用工具NDepend。该工具允许在 C# LINQ 查询(我们称之为CQLinq)上编写代码规则。免责声明:我是该工具的开发人员之一
默认提出超过200 条代码规则。借助众所周知的C# LINQ 语法,自定义现有规则或创建自己的规则非常简单。
为了保持低误报的数量(即避免过多的报告),CQLinq 提供了独特的功能,通过以 notmycode 为前缀的特殊代码查询来定义JustMyCode集合。有关此功能的更多说明,请参见此处。例如,这里有两个notmycode默认查询:
为了保持低误报的数量,使用 CQLinq,您还可以将规则结果集中在添加的代码或重构的代码上,因为过去定义了基线。请参阅以下规则,该规则检测自基线以来添加或重构的过于复杂的方法:
warnif count > 0
from m in Methods
where m.CyclomaticComplexity > 20 &&
m.WasAdded() || m.CodeWasChanged()
select new { m, m.CyclomaticComplexity }
最后,请注意,使用 NDepend 代码规则可以在 Visual Studio 中实时验证,并在构建过程中,在生成的 HTML+javascript 报告中进行验证。