0

現在、.NET フレームワークのコード コントラクトを調べています。私がやりたいのは、同僚が Visual Studio に必要な拡張機能をインストールしてそのまま作業を続けることを強制されることを避けながら、これらのコントラクトを使用することです。

コントラクトを使用していくつかのメソッドをセットアップし、実行されたアプリケーションから、CONTRACT_FULLシンボルは定義されているがリライターが呼び出されていないというメッセージを受け取ります。プロジェクト全体を確認しましたが、このシンボルはどこにも定義されていません。この定義はどこから来て、どうすればそれを取り除くことができますか?

コントラクト リライターを有効にすると、このエラーは発生しなくなりますが、前述したように、このリライターをインストールする必要はありません。

4

1 に答える 1

1

メッセージの残りの部分は、おそらくContract.Requires< TException >を使用していることを示しています。

ドキュメントに記載されているように、を使用する場合実行時チェックを有効にする必要がありますContract.Requires<TException>Contract.Requires<T>その理由は、コードの実行は、前提条件が失敗した場合に予想される例外をスローすることに依存しているためです。

一方、Contract.Requires(Boolean)は前提条件を定義するだけで、プログラムの実行には影響しません。せいぜい、事前条件が失敗したときに迷惑なアサーション メッセージを表示するだけです。この場合、書き換える必要はありません。

フル ランタイム コントラクト チェックを有効にしていなくてもエラーが発生するため、このメッセージは少し誤解を招きます。

これを修正するには、すべてのマシンにリライターをインストールするか、Contract.Requires(Boolean) の使用に切り替える必要があります。

于 2013-07-15T13:31:45.390 に答える