0

私のアプリケーションは、.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つまり、参照されているアセンブリは (フックにもかかわらず) 読み込まれていません。

4

1 に答える 1