0

以下は、静的分析ツールを失敗させるために作成した例です。

using System.Diagnostics.Contracts;
using System;

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

実行時分析では正しい例外がスローされますが、静的分析では警告も表示されずにビルドされます。プロジェクト設定ですべてのチェックボックスを選択し、「こんにちは」の警告レベルを設定しています。バージョン 1.4.51019.0 を実行しています。

コンパイルを失敗させるにはどうすればよいですか?

4

1 に答える 1

3

「すべてのチェックボックスが選択されています」がここでの問題です。「Infer Guarantees」のチェックを外す必要があります。

ここで起こることは次のとおりです:作成したコードは
決して正しくありません。 この矛盾のため、Code Contractsは を推論しますが、これは常に失敗します。 メソッドの先頭で推論されると、静的アナライザーはメソッドの残りをスキップするようになると思います。xnullxnull
Contract.Ensures(false)
Contract.Ensures(false)

推論Contract.Ensures(false)は Code Contracts の間違いのように思えますが、それを無効にする唯一の方法は、ensure の推論を完全に無効にすることです。

于 2013-02-13T12:23:44.787 に答える