【问题标题】:Suppress CA1062 with fluent validation通过流利的验证抑制 CA1062
【发布时间】:2012-01-04 21:48:14
【问题描述】:

我有一个流畅、可扩展的验证助手,例如:

Assert.That(aParameter).IsNotNull();

它是可扩展的,因为 That 方法实际上是通用的 (That) 并使用隐式类型来返回通用的 IAssertCondition 对象。 IsNotNull 实际上是一个扩展方法。

无论如何,使用这种方法验证传递给方法的参数的问题是我收到 CA1062 警告,指示我在使用参数之前验证参数,当然,我已经在这样做了。

我阅读了 Eric Smith 的帖子 (here) 关于使用 ValidatedNotNullAttribute 通知 FxCop 该参数正在验证中,但我不知道如何使用我描述的流畅界面来完成此操作。

我有哪些选择,以便代码分析能够识别出上述语句满足要求并且不会出现警告?

【问题讨论】:

    标签: visual-studio-2010 code-analysis static-code-analysis


    【解决方案1】:

    在这种情况下,您可以添加属性的唯一位置是That<T> 方法的参数。不幸的是,虽然这会阻止 CA1062 触发,但它可能会导致误报,因为您需要调用的不仅仅是 That<T> 来实际实施“非空”验证。如果您想使用代码分析以识别您的验证助手的方式正确检查参数验证,您几乎必须编写自己的规则来替换 CA1062。

    【讨论】:

    • 您能否指出任何资源来解释如何编写我自己的规则,以便我了解其中涉及的内容?谢谢!
    • 没有官方的规则编写SDK。最完整的资源是binarycoder.net/fxcop/index.html
    • 我已经粗略阅读了链接中的文档,并且喜欢编写一些自定义规则来执行其他标准的想法,但我不知道如何能够替换现有的 CA1062规则。你能提供更多细节吗?
    • 替换是关键词。我可以从链接中看到如何添加自定义规则,但您建议我可以用我自己的实现替换现有的内置规则。我不知道如何做到这一点。
    • 或者您是否建议我创建自己的实现并通过关闭 CA1062 来有效替换 CA1062?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2021-09-16
    • 2019-07-13
    • 1970-01-01
    相关资源
    最近更新 更多