3

大規模なデスクトップ アプリケーション プロジェクトで .NET 3.5 のコード コントラクトを使用しようとしています。このプロジェクトには、古いマネージ C++ 構文で記述された混合モードの C++ DLL 依存関係もあります。

実際のソリューションは少なくとも 20 のプロジェクトで構成されていますが、A、B、C、および D プロジェクトと、混合モードの M プロジェクトのみがあると仮定します。C は A、B、および M に依存します。A、B、および C はすべてランタイム チェックを実行するように構成されており、コードの書き換えはうまく機能します。ここで、D と呼ばれる上位レベルのアセンブリの 1 つにいくつかのコントラクトを追加したいと考えました。D は、他のすべての A、B、C、および M にも依存します。D のコードの書き換えが失敗し、次のメッセージが表示されます (名前を変更しました)。

15>    Reading assembly 'C' from 'build\debug\C.dll' resulted in errors.
15>    ccrewrite : error : Rewrite aborted due to metadata errors. Check output window
15>        Input string was not in a correct format.
15>        Malformed signature.
15>        Index was outside the bounds of the array.
15>        Malformed signature.
15>        Could not resolve type reference: [M]Name.Space.Class1.
15>        Could not resolve type reference: [M].EnumType.
15>        Malformed signature.
15>        Malformed signature.
15>        Could not resolve type reference: [M]Name.Space.Class1.
15>        Could not resolve type reference: [M].EnumType.
15>        Malformed signature.
15>        Malformed signature.
15>        Input string was not in a correct format.
15>        Malformed signature.
15>        Could not resolve type reference: [M]Name.Space.Class1.
15>        Could not resolve type reference: [M].EnumType.
15>        Malformed signature.
15>        Malformed signature.
15>        Index was outside the bounds of the array.
15>        Malformed signature.

M に関するメッセージなので、混合モードの C++ DLL に問題があると思います。ただし、C アセンブリ自体は、M も参照しながら、コードを正常に書き直すことができます。

また、同じソリューション内の他の上位レベルのアセンブリで試してみたので、問題は D アセンブリに直接あるわけではないと思います.C を参照している場合、コード コントラクト ツールでそれらを書き換えることはできません。

私が使用しているバージョンは 1.2.21023.14 です

CodeContracts MSDN フォーラムでもこの質問をしましたが、まだ回答が得られていないので、ここで試してみようと思いました。これに関連する回避策やアイデアに興味があります。

4

1 に答える 1

3

メタデータ エラーをクリアするには、多くの場合、ソリューションをクリーンアップしてから再構築するだけで十分です。

于 2011-03-18T13:43:55.650 に答える