C# 代码合同警告未显示

C# 代码合同警告未显示,c#,.net,code-contracts,C#,.net,Code Contracts,我有一个简单的代码: public ArrayStack(int capacity) { Contract.Requires(capacity >= 0); Contract.Ensures(_items != null); Contract.Ensures(_items.Length == capacity); _items = new T[capacity]; _top = -1; } 我

我有一个简单的代码:

public ArrayStack(int capacity)
    {
        Contract.Requires(capacity >= 0);
        Contract.Ensures(_items != null);
        Contract.Ensures(_items.Length == capacity);
        _items = new T[capacity];
        _top = -1;
    }
我希望一旦我输入followig,我会得到一个编译时警告,但我只从契约中得到一个运行时异常

static void Main(string[] args)
    {
        int i = -1;
        ArrayStack<string> stack = new ArrayStack<string>(i);

    }
static void Main(字符串[]args)
{
int i=-1;
ArrayStack堆栈=新的ArrayStack(i);
}
有什么想法吗

已编辑:我的代码合同设置的图片

如果您想获得曲线,则必须选中“显示曲线”:

重新构建项目,等待静态分析完成,您将在“输出”窗口中看到警告(如果您没有运行VS的“最终”版本,这些警告很容易丢失)和可疑代码下的行

[编辑]顺便说一下,我总是使用“标准合同要求”装配模式运行

然后在示例构建之后:

在IDE中:

把它弄明白了

似乎编译器太聪明了,在最后一行之后没有人使用堆栈,所以他没有检查堆栈

一旦我添加stack.push(…)它就会给我错误


不能让计算机太聪明…

愚蠢的问题,但你真的在运行验证器吗?(你的设置是什么,等等?@JonSkeet-当然,我实际上在那里标记了所有内容:)我正在获得运行时验证。在设置中有什么我应该特别注意的吗?添加了设置页面ImageForMe,您的代码的最小测试版本带有默认的合同设置,一旦背景检查完成,就会出现预期的错误。。。