私のアプリケーションは、.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
に対してのみ呼び出されました。、およびその他の参照アセンブリに対して呼び出されませんでした。そして、私が呼び出したときにそれも投げました。System
System.Windows.Forms
System.Drawing
OpenTK.dll
OpenTK.GLControl.dll
ReflectionTypeLoadException
loadedAssembly.GetTypes()
参照されているアセンブリをロードするようにするにはどうすればよいでしょうか?アプリケーションを検査対象のアセンブリと同じフォルダーに強制的に配置する必要はありません。
アップデート:
を呼び出すとAssembly.ReflectionOnlyLoadFrom
、 を使用GetReferencedAssemblies()
してそのアセンブリからの参照を観察できます。を調べるAppDomain.CurrentDomain.ReflectionOnlyGetAssemblies()
と、単一のアセンブリ (最初に指定されたもの) だけが読み込まれていることがわかりました。ReflectionOnlyAssemblyResolve
つまり、参照されているアセンブリは (フックにもかかわらず) 読み込まれていません。