0

状況は次のとおりです。ILMergeを使用して、このメソッドcustom.dll)を使用してアセンブリとそのすべての参照を1つの.dllファイルにマージしています。実行時にこのアセンブリを動的にロードするアプリケーションがあります(program.exe)。アプリケーションとアセンブリの両方で共通のライブラリ(common.dll)を使用します。抽象クラスClassXはで定義されcommon.dll、実装ClassYはで定義されcustom.dllます。program.exeClassYをロードしようとすると、custom.dll例外がスローされます。

タイプ「ClassY」のオブジェクトをタイプ「ClassX」にキャストできません。

コードはこのようなものですがfoo、単なる新しいClassY()ではなく、動的にロードされます。

object foo = new ClassY();
ClassX bar = (ClassX)foo;

なぜそれがこれを行うのか誰かが知っていますか? ClassY間違いなく実装されClassX、すべてのアセンブリ/ライブラリバージョンはまったく同じです。

4

2 に答える 2

1

すべてのDLLは、COM表示とマークする必要があります。これがないと、コンパイラは異なるアセンブリタイプを解決できませんでした。同じ名前が付けられていても。

于 2010-12-15T19:14:35.027 に答える
0

内部例外を確認しましたか?ClassYは動的にロードされるため、キャストを実行すると、事前にマージされたアセンブリの1つをロードしようとしている可能性があります。内部例外は、「アセンブリをフィンできません」{アセンブリ名が事前にマージされています}」です。

于 2009-11-02T23:45:49.403 に答える