2011-08-12 19 views
2

私はこの構造のC#でアプリケーションを内蔵:セットアセンブリ基準経路

SystemPath
- MainApplication.EXE
- API.dll
- モジュール
------- Module1.dll
------- Module2.dll

MainApplication.exeには、アセンブリAPI.dllが参照されています。また、アセンブリModule1とModule2を "Assembly.Load(dllFile)"で使用します。 ファイルModule1.dllとModule2.dllにもファイルAPI.dllが必要です。

したがって、それらは同じパスでAPI.dllが必要です。ファイルAPI.dllを両方のディレクトリ(SystemPathとModules)に配置する必要があります。

私が欲しいのは、ファイルにAPI.dllがAssembly.Loadをロードしているときにそのフォルダにあることをモジュールに伝える方法です。

グローバルアセンブリキャッシュは使用できません。この構造は変更できません。

私はこれを解決するために何ができますか?

+0

Stack Overflowで 'AppDomain.CurrentDomain.AssemblyResolve'を検索することをお勧めします。あなたは、あなたの質問に答える既存の質問を見つける必要があります。 – stakx

答えて

4

MainApplication.exe.configファイルに、アセンブリがロードされたときに検索されるセミコロンで区切られたセミコロン区切りのリストを指定する<probing> elementを追加できます。たとえば、

この設定を使用すると、Module1でAssembly.LoadまたはReferenceを実行できます。また、アプリケーションのルートが最上位にあるため、Module1がAssembly.LoadまたはAPI.dllへの参照を行うと、トップレベルのディレクトリから自動的に取得されます。

0

API.dllはModule1/2.dllと同じフォルダにある必要がありますか?プログラムを使用してモジュールを読み込むと、メインアプリからのAPI.dllが読み込まれます。同じバージョンのAPIでコンパイルされていることを確認してください。

関連する問題