对于任何C#开发人员来说,哪些是“必须遵循”FxCop规则?

时间:2008-09-27 08:30:24

标签: c# .net fxcop

我打算在我们正在进行的项目中开始使用FxCop。但是,当我尝试选择所有可用规则时,看起来我必须在代码中进行大量更改。作为一个“团队成员”,我不能马上开始进行这些更改,比如命名约定更改等。无论如何我想开始使用FxCop和最小规则集,并且随着我们的继续逐渐增加规则集。你能否建议我必须有FxCop规则我应该开始遵循。或者你建议采取更好的方法吗?

注意:我的大部分代码都在C#中。

10 个答案:

答案 0 :(得分:12)

关于我们最重要的代码:

  • 将警告视为错误(级别4)
  • FxCop必须通过100%(通常不会忽略)
  • Gendarme用作指南(有时与FxCop冲突)

信不信由你,FxCop教你如何编写更好的代码......很棒的工具!所以对我们来说,所有规则都同样重要。

答案 1 :(得分:8)

在我看来,请执行以下操作:

对于任何新项目,请遵循所有FxCop规则。您可能想要禁用其中的一些,因为并非所有内容都对您的项目有意义。 对于现有项目,请遵循这些类别中的规则作为最小集:

  • 全球化
  • 互操作性
  • 安全
  • 性能
  • 可移植性

由于与其他类别相比,现有项目中通常只有少数规则违规,但可能会提高应用程序的质量。当这些规则明确时,请尝试修复以下类别:

  • 设计
  • 用法

由于这些可以让您更轻松地发现与违规行为有关的错误,但现有代码中存在大量违规行为。

始终按级别/修复类别对违规进行排序,并从关键类别开始。暂时忽略警告。

如果您不知道,还可以从Microsoft获得StyleCop,在源代码级别检查您的代码。确保在安装期间启用MSBuild集成。

答案 2 :(得分:4)

一些规则可以避免我们的错误或泄漏:

  • 不要抓住一般例外类型(对我们来说可能是最好的规则。根据案例,执行起来很容易或很难)
  • 正确测试NaN(易于执行)
  • 应处理一次性字段(非常容易执行)
  • Dispose应该调用base dispose(非常容易执行)
  • 一次性类型应声明终结者(非常容易执行)

有些人帮助我们设计了更好的设计,但要小心,当中央API受到影响时,它们可能会导致您进行大量重构。我们喜欢

  • 收集属性应该只读(在我们的案例中难以执行)
  • 不要公开通用列表
  • 成员不应暴露某些混淆类型
  • 查看已使用的参数(轻松改进您的API)

我们项目中的某个人尝试了效果规则而没有任何改进。 (实际上,这些规则是关于微优化的,如果没有瓶颈识别显示需要微优化,则不会产生任何结果)。我建议从这些开始。

答案 3 :(得分:2)

答案 4 :(得分:2)

一次启用一条规则。修复或排除它报告的任何警告,然后从下一个警告开始。

答案 5 :(得分:2)

最小的fxcop和代码分析(如果使用VS2010 Premium或Ultimate)如下:http://msdn.microsoft.com/en-us/library/dd264893.aspx

答案 6 :(得分:1)

我们是网上商店,所以我们放弃了以下规则:

  • 任何使用Interop的东西(我们不支持COM集成,除非客户支付费用!)
  • 密钥签名(网络应用程序不应该需要高安全性的知识)

我们会放弃在依赖项中使用更高框架的规则,因为我们的一些CMS仍然是.NET 2.0,但这并不意味着DAL / Business Layers不能是.NET 3.5,只要你'不要试图返回IQueryable(或任何.NET 3,3.5)。

答案 7 :(得分:1)

在我们的流程中,我们启用了所有规则,然后我们必须证明任何抑制作为审核流程的一部分。通常情况下,不能以时间效率的方式修复错误,或者错误引发错误(这有时会发生 - 特别是如果您的架构通过反射处理插件)。

我们还为全球化编写了一个自定义规则来替换现有规则,因为我们不想全局化传递给异常的字符串。

总的来说,我认为最好是遵守所有规则。在我目前的家庭项目中,我有四个构建配置 - 一个用于指定CODE_ANALYSIS定义,另一个用于指定CODE_ANALYSIS定义。这样,我可以通过构建非CODE_ANALYSIS配置来查看我压缩的所有消息。这意味着可以定期检查被抑制的消息,并根据需要对其进行寻址或删除。

从长远来看,我想做的是构建步骤,根据实际错误分析SuppressMessage属性,并突出显示那些不再需要的抑制,但目前我的设置无法实现。

答案 8 :(得分:0)

设计和安全规则是一个很好的起点。

答案 9 :(得分:0)

我完全同意Sklivvz。但是对于现有项目,您可以按类别清除FxCop违规类别。

Gendarme不时接受非常有用的新规则。所以你可以使用Gendarme。