2009-04-01 6 views
0

私はこのどうやら珍しくない問題に遭遇してきた - 私は国会Aのインターフェイスを持って異なるアセンブリのオブジェクトを互いにどのようにキャストできますか?

  1. 私は、動的にアセンブリBを読み込み、およびにそれからオブジェクトをキャストしようとしていますアセンブリの私のインターフェイス

  2. これは、InvalidCastExceptionで失敗しています。

私は理由を理解するために来ている - 、アセンブリAでクラスおよびアセンブリBでクラスをしても同じ名前と同じコードで、同じものではありませんし、お互いにキャストすることはできません。

私の質問です:これには解決策がありますか?互換性のある2つの型を作る方法はありますか、アセンブリBのインターフェイスを複製してそのオブジェクトをキャストする必要がありますか?

アセンブリBをAssembly.LoadFromでロードしています - これを行うための別の方法は、型互換性がありますか?

私はこの問題を抱える最初の人になることはできません。私がしようとしていることは、プラグインのアーキテクチャではかなり一般的な作業のように思えます。

答えて

6

複製は答えではありません。アセンブリBはおそらくアセンブリAを参照し、そこからインターフェイス(または何でも)を消費することができますか?

そうでなければ、アセンブリAとアセンブリBの両方が参照するスタンドアロンdllのインタフェース(または何でも)を宣言します。その後、インターフェイスのバージョンは1つだけで、すべてが機能します。

+0

これも私がしなければならないことです。 – RobS

2

あなたは間違いなく、別のタイプの1つのアセンブリ内のタイプからキャストすることができます - それ以外の場合は、我々はobjectから投げ落とさことができませんでした:)

私は問題は、インターフェイスが別々にロードされていることである疑いがある - 私は疑っていることあなたのアセンブリBはアセンブリをもう一度(おそらく別の場所からロードしていますか?

ファイルレイアウトはどのように見えますか?アセンブリBを別のディレクトリからロードしていて、そのディレクトリにアセンブリAのコピーがある場合、そこからアセンブリBが読み込まれている可能性があります。アセンブリの読み込みとバインドは難しいビジネスです。私は "C#経由でCLR"を取得し、その章を非常に慎重に読むことをお勧めします。そして/またはturning on Fusion loggingは何が起こっているかを見てください。

は(私はアセンブリ内の型はBが本当に がない場合は、それはそれを説明するのでしょうか?ちなみに、アセンブリAのインターフェイスを実装しないと仮定しています!)

私はとして機能fairly old articleを持っていますところで、これのための一種のチュートリアルです。それは助けるかもしれません。

関連する問題