私はここ数週間でこの問題を解決しようとしてきましたが、まだ良い解決策は見つかりませんでした。うまくいけば私はここで答えを得ることができます。実行時に2つのバージョンのアセンブリをロードする
共通のプロジェクト/ dll(ZC)を指していますが、異なるバージョン(同じdll名、同じ名前空間、一部のクラスは異なる場合があります)にある可能性がある2つのアセンブリ(ZA & ZB) 。各アセンブリはそれ自身で動作しますが、実行時に他のアセンブリによってロードされる場合(たとえばAロードB)、それを動作させることはできません。助けが要る。
ここでセットアップです:
- ZAは、ZC(共通)バージョン1.1
- ZBは、ZCバージョン1.0
ZAはZBで何かをロードするためのニーズをロードする必要がある(に依存しますが、実行時にZCに依存します)。
ZAはマスターアプリです。 bin
ディレクトリの下には、プラグインディレクトリplugins/plugin-ZB
があり、そこではZBとその依存関係(ZC)をすべて配置したいと考えています。 - うまく働いた
Assembly.Load()
をDLLの同じバージョンを使用して:ここで
は、私がこれまで試したものです。
Assembly.Load()
dll-ZBのさまざまなバージョンを使用してロードしますが、メソッドが実行されると、例外が見つかりません。
AppDomain.Load()
ファイルが見つかりませんでした。私はデリゲートを使ってアセンブリを解決しました。
ZCに関するいくつかの詳細: - いくつかのメソッドはpublic staticです(いくつかはありません)。例えば。 Log.Log("hello");
- 一部は値(プリミティブまたはオブジェクト)を返すことがあります。 - 一部のメソッドは静的ではありません(および戻り値)。
ヘルプ? - TIA
「あなただけのAppDomainのためのアセンブリの一のバージョンを持つことができ、」真実ではありません。 アセンブリの2つのバージョンを1つのアセンブリから参照することもできます。詳しくはexternエイリアスを参照してください。ここではまずGoogleにその機能の例をポップアップ表示します:http://blogs.msdn.com/ b/ansonh/archive/2006/09/28/extern-alias-walkthrough.aspx – Graham
2つのAppDomainsを使用することは、説明した問題の解決策です。 – Graham
あなたは正しく、答えが更新されました! –