2012-02-29 10 views
3

Reflectionから動的にアセンブリを読み込もうとしています。私はリフレクションを使用してsomeExtentionを読み込むことができますResolveEventArgs.RequestingAssemblyがNullです

project 
    \-- BIN 
     |-- myApp.exe 
     |-- SOMEEXTENTION1 
     | |-- someExtention1.dll 
     | \-- itsDependency1.dll 
     |   
     |-- SOMEEXTENTION2 
      |-- someExtention2.dll 
      \-- itsDependency2.dll 

:私はこのようなフォルダ構造を持っています。実行時にsomeExtentionitsDependencyを探す際に問題が発生します。ドットネットはBINフォルダにあります。それはそこに見つかりません。私はこのイベントをトラップしています

のAppDomainのに、AssemblyResolveイベントが発生します...。 ResolveEventArgsには、ロードする必要があるアセンブリの名前が表示されます。問題は、私はRequestingAssemblyを取得しないということです。 ResolveEventArgsのそのプロパティは常に空です。私は、独自のEXTNフォルダで直接見ることができるように、要求しているアセンブリが必要です。それがなければ私はすべてのEXTNフォルダを見る必要がありますが、私の場合はかなり大きくなる可能性があります。

RequestingAssemblyは、このMSDNの記事によると物理ファイルへのパスが含まれているプロパティの場所があります。 this記事また、このプロパティがNothingの場合の状況。私はそこで議論されたロードコンテキストを理解していません。

すべてのヘルプはかなりのだろう...

答えて

5

私は実験(サポートで、再びなしの検索結果)で見つけたものから動的にアセンブリをロードする際、フォルダ名はアセンブリ名と一致してはいけません。私はその後、何が起こるのか正確にはわかりませんが、ローダー機構の中の何かがひっくり返ってしまいます。アセンブリはLoadFromメソッドでロードされるところで

は、それがロードからのコンテキストにロードされます。このコンテキストでは、依存関係アセンブリは、最初にアプリケーションベースを見て次にアセンブリの独自のフォルダで解決されます。私の場合、これは依存関係を解決する問題を解決します。

は下側に私が見つかりました。その負荷は-からは、依存関係の解決に失敗したとに、AssemblyResolveイベントが要求元のアセンブリは使用できませんトリガされた場合。つまり、パスから要求側のアセンブリを判別できませんでした。むしろ、私はLoadFileメソッドを使用する場合、その依存関係が自動的にサブフォルダから解決されない、負荷から使うより

。むしろAssemblyResolveイベントがトリガされます。この場合、ResolveEventArgsには要求しているアセンブリプロパティが含まれます。そこからユーザコードが容易に目標経路を決定することができる。ユーザーコードは依存関係を読み込むことができます。

+0

あなたは正しいです。 LoadFrom()はRequestingAssemblyプロパティを持つイベントを生成しますが、 'Assembly.Load(AssemblyName.GetAssemblyName(path)) 'は実行しません。私は理由を知ることはできませんが、私はスイッチしなければなりませんでした – ekkis

+0

この行は、「動的にアセンブリを読み込むときに、フォルダ名がアセンブリ名と一致してはならない」という時間を節約しました。また、このシナリオでは、リゾルバイベントでRequestingAssemblyがnullであることに気付きました。マイクロソフトでは、LoadFrom()のmsdnページでこれについて警告する必要があります。 – Makolyte