Visual Studio 2010内からコードコントラクトが正常に機能ccrewrite.exe
していますが、コマンドラインからは何もできません。サンプルアプリは次のとおりです。
using System.Diagnostics.Contracts;
public class Dummy
{
public static void Main(string[] args)
{
Contract.Requires(args.Length > 0);
}
}
次に、コードをコンパイルして、ccrewrite.exeを実行します。
> csc /debug+ /D:CONTRACTS_FULL Dummy.cs
> ccrewrite /o:RewrittenDummy.exe Dummy.exe
elapsed time: 61ms
RewrittenDummy.exe
その後、ファイルはありません。
たくさんのオプションを試しましたが、何も違いはありません。私が気づいたいくつかのこと:
- 存在しないファイルを指定すると死ぬので、間違いなくDummy.exeを読み込んでいます
- Dummy.exeには、Contractへの参照が確実に含まれています。引数なしで実行すると、適切に失敗します(ただし、書き直された場合に期待するように、エラーメッセージが入力されていません)。
- 事後条件と不変条件を使用しても違いはありません
警告と冗長性を上げてみましたが、まったく役に立ちません。何が間違っているのでしょうか。
(Code Contractsフォーラムでも質問されています。関連する回答はここに自分で追加します。)