VS代码分析CA1062即使在空检查后也会触发

Posted

技术标签:

【中文标题】VS代码分析CA1062即使在空检查后也会触发【英文标题】:VS codeanalysis CA1062 fires even after null check 【发布时间】:2014-11-21 12:34:53 【问题描述】:

我有一个 Sitecore 项目,我在其中使用了 visualstudio 代码分析。我正在使用 Sitecore 方法“Assert.ArgumentNotNull”检查空参数,但是 visualstudio 代码分析引擎无法识别它并显示“CA1062 验证公共方法的参数”消息。

除了创建自定义规则,有没有更简单的方法告诉分析引擎“Assert.ArgumentNotNull”执行空检查并且消息无效。

我不想隐藏或禁用该消息。

【问题讨论】:

【参考方案1】:

您不能那样使用 Sitecore 的 Assert 类,这就是原因:

Sitecore Assert 类以及 NotNullAttributeCanBeNullAttribute 是 ReSharper 在执行自己的分析时可以理解的方式。

Assert.ArgumentNotNull(object, string)方法的定义如下:

[AssertionMethod]
public static void ArgumentNotNull([CanBeNull] [AssertionCondition(AssertionConditionType.IS_NOT_NULL)] object argument, [CanBeNull] [InvokerParameterName] string argumentName)

所有这些属性都在 Sitecore 中定义,由于命名约定,R# 可以理解它们。

不幸的是,VS 代码分析有另一个命名约定。 ArgumentNotNull 对你来说应该是这样的:

public static void ArgumentNotNull([ValidatedNotNull] object argument, string argumentName)

由于不能修改Assert类,所以不能用ValidatedNotNullAttribute标记argument参数。

【讨论】:

以上是关于VS代码分析CA1062即使在空检查后也会触发的主要内容,如果未能解决你的问题,请参考以下文章

UIView 即使在开始从超级视图中删除后也会重新出现

通过生成参数验证来修复 FxCop CA1062

CGImageRef 即使在释放后也会使用大量内存

代码合约 + 代码分析

即使存在 try/catch 块,应用程序也会在空对象引用上出现“布尔 android.content.Intent.migrateExtraStreamToClipData()”

代码分析—“CA0052 没有选择要分析的目标”(VS2012)