我的应用程序根据.NET应用程序的代码结构生成图表。 Assembly.LoadFile
的作品,但只有当我的应用程序已被放入与我正在加载的程序集相同的文件夹(似乎是由于引用的程序集);如果它不在同一个文件夹中,则如果加载的程序集的依赖项不在GAC中,则会得到ReflectionTypeLoadException
异常。无法加载引用程序集以进行反射
我试过用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
和其他引用的程序集。当我拨打loadedAssembly.GetTypes()
时,它也抛出了ReflectionTypeLoadException
。
我怎样才能让它加载引用的程序集,以便我不必强制将我的应用程序放入与其检查的程序集相同的文件夹中?
更新:
当我打电话Assembly.ReflectionOnlyLoadFrom
,我可以用GetReferencedAssemblies()
观察从装配的引用。当我检查AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies()
时,我注意到只装载了一个组件(最初指定的一个)。换句话说,引用的程序集并不会被加载(尽管挂接了ReflectionOnlyAssemblyResolve
)。
也许它们被加载到一个单独的应用程序域? – animaonline 2013-05-07 08:54:49