【发布时间】:2013-05-07 08:44:20
【问题描述】:
我的应用程序从 .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 钩子)。
【问题讨论】:
-
也许它们被加载到单独的应用程序域中?
标签: c# reflection .net-assembly