静态分析不适用于最简单的可能示例

时间:2013-02-13 12:18:18

标签: c# visual-studio-2010 code-contracts

以下是我创建的示例,以使静态分析工具失败:

using System.Diagnostics.Contracts;
using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            object x = null;
            Contract.Assert(x != null);
        }
    }
}

运行时分析会抛出正确的异常,但静态分析甚至不会发出警告。我在项目设置中选中了每个复选框,并在“hi”上选择了警告级别。我正在运行1.4.51019.0版本。

我需要做些什么才能让编译失败?

1 个答案:

答案 0 :(得分:3)

“选中的每个复选框”都是此处的问题。您需要取消选中“推断确保”。

这里发生的是以下内容:
您创建的代码永远不会是正确的,您使用x初始化null,然后直接断言x不应该null
由于这种矛盾,代码合同推断Contract.Ensures(false),这将永远失败 我假设方法开头的impred Contract.Ensures(false)将使静态分析器跳过方法的其余部分。

推断Contract.Ensures(false)对我来说似乎是代码合同的错误,但禁用它的唯一方法是禁用完全确定的推断。

相关问题