18

私は次の方法を持っています:

private void DoSomething(CoolClass coolClass)
{
    if (coolClass == null)
    {
        throw new ArgumentNullException("coolClass");
    }
    coolClass.Name = "Pepe";
}

Code Contracts を使用すると、次のように記述できます。

private void DoSomething(CoolClass coolClass)
{
    Contract.Requires<ArgumentNullException>(coolClass != null, "IS NULLL!");
    coolClass.Name = "Pepe";
}

2 番目の方法は、短くて簡単です。私が抱えている問題は、それをビルドすると、実行時に例外がスローされず、次のように表示されることです。

説明: アセンブリ (おそらく "CodeContractsTest") は、コード コントラクト バイナリ リライター (CCRewrite) を使用して書き換える必要があります。これは、Contract.Requires を呼び出しており、CONTRACTS_FULL シンボルが定義されているためです。プロジェクトから CONTRACTS_FULL シンボルの明示的な定義をすべて削除し、再構築します。CCRewrite はhttp://go.microsoft.com/fwlink/?LinkID=169180からダウンロードできます。リライターをインストールしたら、Visual Studio の [コード コントラクト] ペインのプロジェクトの [プロパティ] ページから有効にすることができます。CONTRACTS_FULL を定義する「Perform Runtime Contract Checking」が有効になっていることを確認します。

VS を使用しない限り、ここから .net の CodeContracts をダウンロードします。

次に、プロジェクトの「ランタイム チェック」をチェックして、ランタイムでビルドすると例外がスローされるようにします。

私たちのアプリは、PowerShell スクリプトを使用して Jenkins で構築されています。単純なコマンドや属性、または簡単なものを使用して、実行時にチェックインして例外をスローする方法はありますか?

4

2 に答える 2

5

次のプロジェクト プロパティを変更することで、実行中にこの例外が発生するのを防ぐことができました。

プロジェクトを右クリック -> プロパティ -> コード コントラクト (タブ) アセンブリ モードを「標準コントラクトが必要」に変更し、チェックボックスも選択 - ランタイム コントラクト チェックを実行

于 2016-06-10T09:57:52.053 に答える
4

シンプルさが好きなら、独自のバージョンのメソッドを作成してみませんか?

public class CustomContract
{
    public static void Requires<TException>( bool Predicate, string Message )
        where TException : Exception, new()
    {
       if ( !Predicate )
       {
          Debug.WriteLine( Message );
          throw new TException();
       }
    }
}  

コード コントラクトを使いやすい API にするというのは、スズメを大砲で撃つようなものです。

于 2013-09-13T19:26:39.457 に答える