0

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

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。

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

4

1 回答 1

3

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

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

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

于 2013-02-13T12:23:44.787 回答