Assemblyの動的ロード
アプリケーションディレクトリ |-App.exe (アプリケーション本体) |-dlls |-Hoge |-Hoge.dll(App.exeからロードされるアセンブリ) |-Util.dll(Hoge.dllが参照しているアセンブリ)
App.exe.configで,dllsディレクトリをプロービング対象に追加しておきます.
普通に
Assembly asm = Assembly.Load("Hoge"); // もしくはFullNameを指定
とすれば,Hoge.dll のロードには成功しますが,Hoge.dll 内のクラスが Util.dll を利用しようとした段階でFileNotFoundException が throw されてしまいます.
想定しているシチュエーションは,App.exe は Hoge.dll のことしか知らない,という状態です.
App.exeとしては,「Util.dllをくれ」といわれても,どこからロードすればよいのかわからない,ということなのでしょう(Util.dllの解決時に,Hogeディレクトリ以下はプロービング対象にならない).
アプリケーション構成ファイルに,privatePathを追加すればロードできるようになるのですが,アセンブリを追加するたびにパスも追加する,というのは避けたいところです.
全てのアセンブリをごちゃ混ぜにして(Hogeディレクトリをなくして),dllsに配置するしかないのでしょうか?