質問

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フォーラムの質問。関連する回答はここに追加します。)

役に立ちましたか?

解決

さて、これは MSDNフォーラムで回答。かつて、それは本当に私が完全に愚かではなかった-それは実際に警告で行うことができるものです。

詳細についてはフォーラムの投稿を読んでください。しかし、基本的な問題は、 ccrewrite がコントラクトクラスを見つけられなかったことです。 mscorlib .NET 4.0の代わりに。

これは、関連するアセンブリへのパスを明示的にリストすることで修正できます。

> ccrewrite /o:rewrittendummy.exe dummy.exe 
  /libpaths:%SystemRoot%\Microsoft.Net\Framework\v4.0.20506
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top