2008-09-27 91 views
28

我打算在我们正在进行的一个项目中开始使用FxCop。但是,当我尝试选择所有可用的规则时,它看起来像我必须在我的代码中做出很多更改。作为一名“团队成员”,我不能马上开始进行这些更改,比如命名约定更改等等。无论如何,我想开始使用FxCop,并使用最小规则集,并逐渐增加规则集。你能建议我一些必须有FxCop规则,我应该开始关注。或者你有什么更好的方法?对于任何C#开发人员,哪些是“必须遵循”FxCop规则?

注:我的大部分代码都是用C#编写的。

回答

0

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

8

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

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

  • 全球化
  • 互操作性
  • 安全
  • 性能
  • 便携

因为这些都是典型的与其他类别相比,现有项目中只有少数规则违规,但可能会有所改进您的应用程序的质量。当这些规则是明确的,尝试解决以下几类:

  • 设计
  • 使用

因为这些东西会令你更容易被发现有与违法行为做错误,但现有代码中会有大量违规行为。

总是按级别/修复类别对违规行为进行排序,并从关键行为开始。现在跳过警告。

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

+0

+1了StyleCop,它的ReSharper很好地集成了。在你的代码中强制执行编码标准,如果它足够好并且正常工作,你最终可能会让其他人加入进来,但是要做好长期准备! – 2010-01-27 11:01:38

12

在我们最重要的代码:

  • 警告视为错误(4级)
  • FxCop的,必须通过100%(没有忽略一般允许)
  • Gendarme作为指导(有时是冲突与FxCop)

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

+0

@Skliwz:+1,唯一的区别是我们在开发期间运行一个缩减集,但必须将其全部传递给QA。 – user7116 2008-09-27 23:37:30

+2

许多FxCop规则的假阳性率很高。例如,以“Get”开头或捕捉一般例外的函数。 – 2008-12-18 17:13:08

1

我们是一家网上商店,所以我们把下列规则:

  • 任何与互操作(我们不支持COM集成除非客户支付了!)
  • 密钥签名(Web应用程序不应该需要高安全性prilages)

偶尔我们将下降约在依赖关系使用更高的框架规则我们的一些CMS的的仍然是.NET 2.0,但是这并不意味着DAL /业务层可以只要你不试图返回一个IQueryable(或者.NET 3,3.5)。

0

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

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

1

在我们的过程中,我们启用了所有规则,然后我们必须证明任何压抑是我们审核过程的一部分。通常,以时间有效的方式修复错误是不可能的,因为截止日期或错误会引发错误(这有时会发生 - 特别是如果您的体系结构通过反射来处理插件)。

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

总的来说,我认为最好尝试并遵守所有规则。在我目前的家庭项目中,我有四种构建配置 - 一种指定CODE_ANALYSIS定义,另一种则不指定。这样,我可以通过构建非CODE_ANALYSIS配置来查看所有我已经禁止的消息。这意味着可以定期查看被抑制的消息,并根据需要进行处理或删除。

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

2
2

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

4

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

  • 不要捕捉一般异常类型(可能是对我们最好的规则根据的情况下,它可以很容易执行或者难以执行。)
  • 试验的NaN正确地(容易执行)
  • 一次性字段应该被设置(相当容易执行)
  • 处置应该调用基处置(相当容易执行)
  • 一次性类型应该declar e终结者(很容易执行)

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

  • 集合属性应该是只读的(很难在我们的情况下强制执行)
  • 不要暴露泛型列表
  • 成员不应该让某些conrete类型
  • 审查usuned参数(很容易使你的API )

有人在我们的项目上尝试了性能规则没有任何改进。 (实际上,这些规则是关于微观优化的,如果没有瓶颈识别显示需要进行微观优化,则不会给出结果)。我会建议而不是从这些开始。

相关问题