2

[プロジェクト プロパティ] ページの [コード コントラクト] タブでコントラクト チェックを有効にすると、Visual Studio はCONTRACTS_FULLシンボルを自動的に定義します。

- C# 5.0 の概要 (518 ページ)

シンボルを無効/未定義にしたいのですが、プロジェクト設定のタブのConditional compilation symbolsフィールドに表示されません。Build

(コード コントラクトを完全に無効にすることには興味がありません! つまり、コントラクト チェックを に設定することNoneは解決策ではないということです)。

それが重要な場合、私がこれをやりたい理由は、私のリリース ビルドでは をスローしたいだけで、まったくContract.Requires<TException>スローしたくないからですContractException

私が見つけた1つの「解決策」は#undef CONTRACTS_FULL、各ファイルの最初の行に置くことです。これで修正されましたが、実際にそれを行うのは恐ろしいことです。

(ところで、今までVSは定義CONTRACTS_FULLしていなかったので、自分で定義する必要がありましたが、誤って設定が変更されたと思います)

4

2 に答える 2

3

コントラクト ツールを実行して CONTRACTS_FULL シンボルを定義解除することはできません。ツールは、定義されているものに依存します。これを強制しようとすると、何も機能しません。そのため、msbuild スクリプト内でシンボルを自動的に定義します。

コード コントラクト ツールのユーザーは、CONTRACTS_FULL シンボルはツール制御変数であるため、手動で定義または定義解除しようとしないでください。

于 2013-04-25T00:27:28.387 に答える
0

私はその本を読みましたが、Contract.Requires のみを使用する契約レベルがありました。それはそこにない前のオプションでしたが、間違いなく本のそのセクションのどこかにあります. ただし、CONTRACTS_FULL をグローバルに undefing することはできません。ごめん。そのコントラクト チェック レベルでは、自動的に未定義になると思います。

編集: ええ、レベル 1 (ReleaseRequired) に置く必要があります。

于 2013-03-02T14:22:49.730 に答える