私のアプリケーションは、.NET アプリケーションのコード構造から図を生成します。Assembly.LoadFile動作しますが、アプリケーションがロードしているアセンブリと同じフォルダーに配置されている場合のみです (参照されているアセンブリが原因のようです)。同じフォルダーにないReflectionTypeLoadException場合、読み込まれたアセンブリに GAC にない依存関係があると、例外が発生します。
Assembly.ReflectionOnlyLoadFrom代わりに使ってみました。
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += ResolveAssembly;
Assembly loadedAssembly = Assembly.ReflectionOnlyLoadFrom(FileName);
次のイベントで:
Assembly ResolveAssembly(object sender, ResolveEventArgs args){
return Assembly.ReflectionOnlyLoad(args.Name);
}
しかし、それは、、およびResolveAssemblyに対してのみ呼び出されました。、およびその他の参照アセンブリに対して呼び出されませんでした。そして、私が呼び出したときにそれも投げました。SystemSystem.Windows.FormsSystem.DrawingOpenTK.dllOpenTK.GLControl.dllReflectionTypeLoadExceptionloadedAssembly.GetTypes()
参照されているアセンブリをロードするようにするにはどうすればよいでしょうか?アプリケーションを検査対象のアセンブリと同じフォルダーに強制的に配置する必要はありません。
アップデート:
を呼び出すとAssembly.ReflectionOnlyLoadFrom、 を使用GetReferencedAssemblies()してそのアセンブリからの参照を観察できます。を調べるAppDomain.CurrentDomain.ReflectionOnlyGetAssemblies()と、単一のアセンブリ (最初に指定されたもの) だけが読み込まれていることがわかりました。ReflectionOnlyAssemblyResolveつまり、参照されているアセンブリは (フックにもかかわらず) 読み込まれていません。