我计划在我们正在进行的项目之一中开始使用 FxCop。但是,当我尝试选择所有可用规则时,看起来我必须对我的代码进行大量更改。作为“团队成员”,我不能立即开始进行这些更改,例如更改命名约定等。无论如何,我想开始使用具有最小规则集的 FxCop,并随着我们的继续而逐渐增加规则集。你能建议我一些必须有我应该开始遵循的 FxCop 规则吗?或者你有什么更好的方法吗?
注意:我的大部分代码都是用 C# 编写的。
在我们最重要的代码上:
信不信由你,FxCop 会教你很多关于如何编写更好的代码的知识……很棒的工具!所以对我们来说,所有规则都同等重要。
在我看来,请执行以下操作:
对于任何新项目,请遵守所有 FxCop 规则。您可能想要禁用其中的一些,因为并非所有内容都对您的项目有意义。对于现有项目,请遵循以下类别中的规则作为最低限度:
由于与其他类别相比,这些通常只是现有项目中的少数违规行为,但可能会提高您的应用程序的质量。当这些规则明确时,尝试修复以下类别:
因为这些将使您更容易发现与违规有关的错误,但是您将在现有代码中遇到大量违规。
始终按级别/修复类别对违规进行排序,并从关键违规开始。暂时跳过警告。
如果您不知道,Microsoft 还提供 StyleCop,可在源代码级别检查您的代码。请务必在安装期间启用 MSBuild 集成。
一些规则避免了我们的错误或泄漏:
有些帮助我们有更好的设计,但要小心,当中心 API 受到影响时,它们可能会导致你进行大规模的重构。我们喜欢
我们项目中的某个人尝试了性能规则,但没有任何改进。(实际上,这些规则是关于微优化的,如果没有瓶颈识别表明需要微优化,则不会给出结果)。我建议不要从这些开始。
最小的 fxcop 和代码分析(如果使用 VS2010 Premium 或 Ultimate)如下:http: //msdn.microsoft.com/en-us/library/dd264893.aspx
一次打开一个规则。修复或排除它报告的任何警告,然后从下一个开始。
FxCop 的替代方法是使用 NDepend 工具,该工具允许在 C# LINQ 查询(即 CQLinq)上编写代码规则。免责声明:我是该工具的开发人员之一
默认提出超过200 条代码规则。借助众所周知的C# LINQ 语法,自定义现有规则或创建自己的规则非常简单。
NDepend 在某些代码规则上与 FxCop 重叠,但提出了许多独特的代码规则。以下是一些我认为必须遵守的规则:
请注意,可以在 Visual Studio 中和在构建过程中在生成的 HTML+javascript 报告中实时验证规则。
我们是一家网上商店,所以我们放弃了以下规则:
有时我们会放弃在依赖项中使用更高框架的规则,因为我们的一些 CMS 仍然是 .NET 2.0,但这并不意味着只要您不尝试,DAL/业务层就不能是 .NET 3.5返回 IQueryable(或任何 .NET 3、3.5)。
在我们的流程中,我们启用了所有规则,然后我们必须证明任何禁止行为是我们审查流程的一部分。通常,就截止日期或错误引发的错误(有时会发生这种情况 - 特别是如果您的架构通过反射处理插件时)以省时的方式修复错误是不可能的。
我们还为全球化编写了一个自定义规则来替换现有的规则,因为我们不想全球化传递给异常的字符串。
一般来说,我会说最好尝试遵守所有规则。在我当前的家庭项目中,我有四个构建配置 - 一组指定 CODE_ANALYSIS 定义,一组不指定。这样,我可以通过构建非 CODE_ANALYSIS 配置来查看我抑制的所有消息。这意味着可以定期查看被抑制的消息,并可能根据需要对其进行处理或删除。
从长远来看,我想做的是有一个构建步骤,根据实际错误分析 SuppressMessage 属性并突出显示不再需要的那些抑制,但我的设置目前无法做到这一点。
设计和安全规则是一个很好的起点。
我完全同意 Sklivvz。但对于现有项目,您可以按类别清理 FxCop 违规行为。
宪兵不时接受非常有用的新规则。因此,您还可以使用宪兵。