【问题标题】:Is there a standard FxCop rule that detects throwing new exceptions without setting InnerException?是否有标准的 FxCop 规则可以检测抛出新异常而不设置 InnerException?
【发布时间】:2016-03-09 08:16:12
【问题描述】:

我们的(相当大的)代码库有一些这样的结构:

try {
    DoSomething();
}
catch (Exception e) {
    CleanUp();
    throw new MoreSpecificException();
}

而且我想确保我们在大多数情况下抛出一个设置了 InnerException 的新异常。

是否有标准的 FxCop 规则可以检测抛出新异常而不设置 InnerException?我的研究(谷歌搜索)表明不存在这样的规则。

如果没有,如何创建这样的规则? (我以前从未创建过自定义 FxCop 规则)。

我还查看了Gendarme tool,但在那里找不到我需要的东西。

FxCop 规则由 SonarQube 运行,顺便说一句。

【问题讨论】:

    标签: c# .net sonarqube fxcop fxcop-customrules


    【解决方案1】:

    是的,这可以通过 FxCop 实现。创建自定义规则的指南可以http://www.binarycoder.net/fxcop/index.html

    FWIW,我建议改为创建“不吃异常”规则,将原始异常作为内部异常抛出一个新异常,这是该规则识别的“不吃”模式之一。这比“每个抛出异常都必须有一个内部异常规则”更普遍有用,并且使用后一个规则避免潜在的大量误报。

    【讨论】:

    • 我在想的规则是“catch 块内的每个抛出的异常都必须有一个内部异常”
    • 这并不能确保内部异常实际上是您想要的异常。即:throw new MoreSpecificException(new WhateverException()) 可能满足规则,但仍会丢失原始异常。
    • 没错,但我怀疑代码库中的大多数情况根本没有设置内部异常。
    • FxCop 将被弃用,我强烈建议您将其作为 Roslyn 规则来实施。
    • 这个规则的想法看起来很不错,请随时将它推荐给 SonarLint VS 项目,如果最终在产品中实施,您将获得免费的 SonarQube T 恤!在此处创建您的问题:github.com/SonarSource/sonarlint-vs/issues
    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多