2011-08-10 14 views
4

Visual Studio 2010で新しいコード契約を試したいのですが、Visual Studioに追加の拡張機能をインストールしたくありません。私の同僚と共有しています)。 .NET 4.0を対象とすると、新しいSystem.Diagnostics.Contracts名前空間を使用できますが、まだ何もする必要はありません。.NET 4.0のすぐに使用できるコード契約

static void Main(string[] args) 
{ 
    Greet(null); 
    Console.ReadLine(); 
} 

private static void Greet(string name) 
{ 
    Contract.Requires(name != null); 
    Console.Out.WriteLine("Hello {0}", name); 
} 

プログラムを使用して例えば

は、コンパイルし、実行し、あらゆる種類の警告なし(「こんにちは」を表示します)。 Contract.Requires<ArgumentNullException>(name != null)を使用しようとすると、名前の値に関係なく、リライタを使用する必要があるというメッセージが表示されます。 コードコントラクトプレミアムをインストールすると、私はどんな種類の魔法をも得ることができますが、そうしないとこの名前空間の目的は何ですか?複雑なコメント以外のものに対してコード契約を使用することはできますか?

答えて

6

CONTRACTS_FULLプリプロセッサシンボルを定義すると、さまざまなContract.*メソッドが、リライトが実行されないため(コメントごとに)失敗することになります。プリプロセッサシンボルを定義しない限り、コンパイル時に無視されます。余分なソフトウェアはコードを展開する際にインストールする必要がないように

枠組みの中で最低限のコードコントラクトクラスを含めてのポイントがある - しかし、あなたはを行うために余分なツールをインストールする必要がありますビルド時の後処理。

+0

同僚に任意の新たな要件を課すことなく先に行くと、拡張機能をインストールし、契約から真のメリットを得ることができますもちろん、コードのデプロイメントを忘れていた*咳*。ありがとう! – Jens

+0

@Jens:「リライタを要求する」とはどういう意味ですか?私はそれがちょうど例外をスローすることを期待しました... –

+0

私は "Contract.Requiresを使用しているときに書き換えを使用する必要があります"というメッセージでアサート失敗を取得しています。 – Jens

2

私は、エクステンションをインストールすることに異論はないと思います。契約を結んでいるということは、あなたの同僚に望む契約のすべてを使用させることができ、拡張機能をインストールせずにコードをコンパイルできることを意味します。

その後、定義CONTRACTS_FULLが書き換えを要求する必要はなく、ののも、非ジェネリックバージョンを行います

関連する問題