我的应用程序从 .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
钩子)。