Visual studio Visual Studio中的代码分析合规性应该有多严格?

Visual studio Visual Studio中的代码分析合规性应该有多严格?,visual-studio,warnings,code-analysis,fxcop,standards-compliance,Visual Studio,Warnings,Code Analysis,Fxcop,Standards Compliance,在为我正在从事的一个小项目进行代码分析之后,我想知道在解析代码以使其符合分析要求时,我应该有多严格 我知道我可以抑制警告,但对我来说,在某种程度上抑制警告是一种逃避(没有双关语的意图…“FXCop”) 示例警告: 不要在意外情况下引发异常 位置“CustomObject.Equals(object)”创建类型为的异常 “例外”。不应在此类事件中引发异常 方法。如果可能引发此异常实例,请更改此 方法的逻辑,因此它不再引发异常 扔这个的原因… Equals(object)可能会尝试将CustomOb

在为我正在从事的一个小项目进行代码分析之后,我想知道在解析代码以使其符合分析要求时,我应该有多严格

我知道我可以抑制警告,但对我来说,在某种程度上抑制警告是一种逃避(没有双关语的意图…“FXCop”)

示例警告:

不要在意外情况下引发异常 位置“CustomObject.Equals(object)”创建类型为的异常 “例外”。不应在此类事件中引发异常 方法。如果可能引发此异常实例,请更改此 方法的逻辑,因此它不再引发异常

扔这个的原因…

Equals(object)可能会尝试将CustomObject与FooBarObject进行比较……它们甚至不是相同的类型,因此在本例中,我应该抛出一个异常,还是只返回false



一般来说,我是否应该在使代码完全符合要求方面真的很笨拙(因为缺少更好的词语),或者我是否会遇到需要禁止警告的情况?

FxCop警告只是警告,它们不会标记无效代码。这是编译器的工作。FxCop使用的规则是从多年编写.NET代码的经验中收集的。它们代表“最佳实践”,通常用于提醒您意外后果和.NET编程中更模糊的部分,如CAS

请始终参阅文档以了解规则存在的原因。对于CA1065,您将看到:

Equals方法应该返回true或false,而不是引发异常。例如,如果向Equals传递了两个不匹配的类型,那么它应该只返回false,而不是抛出ArgumentException


这完全符合你的使用习惯,你采纳这个建议不会有问题。不幸的是,这条规则创建的确切原因有点短。这并没有超出“不要在意想不到的地方抛掷”的指导。这里的意外结果是,另一个使用您的类的程序员不会意识到,如果他不希望代码失败,就需要try/catch。可以在Equals方法中随意添加Debug.Assert()。在很多情况下,您可能会忽略这些建议,例如,CA2000特别容易出现错误警告。如果需要,请应用[SuppressMessage]属性,以避免再次查看它。

为什么不测试.NET Framework提供的类,并观察它们在这种情况下的行为?这就是FxCop/代码分析试图告诉您的。一般来说,除非你有充分的理由,否则你应该遵循建议。这详细说明了使用代码分析的一些好理由,以及实现它的过程。只是出于兴趣,FXCop和代码分析本质上是一样的吗?