【发布时间】:2010-02-24 07:31:56
【问题描述】:
这是使用 Assembly.ReflectionOnlyLoadFrom 的场景:
我的程序集 Inspected 和我的反射应用程序 Inspector 都引用了程序集 Dependency。
如果 Inspector 引用 Dependency 1.0.0.0 和 Inspected 引用 Dependency 1.1.0.0,Inspector 不能反映 中的任何类型或方法Inspected 使用来自 Dependency 的类型。当这种类型被击中时,我得到:
System.IO.FileLoadException:不能 加载文件或程序集'依赖, 版本=1.1.0.0,文化=中性, PublicKeyToken=null' 或其之一 依赖关系。位于的组件的 清单定义不匹配 装配参考。 (例外来自 HRESULT: 0x80131040)
但是,Inspector 可以很好地反映 Dependency 1.1.0.0 本身,所以加载 Dependency 1.1.0.0 作为 Assembly.ReflectionOnlyLoadFrom 确实可以在已经使用 Dependency 1.0.0.0 的程序集中工作强>。
这是我用来加载程序集并预加载它的依赖项的代码:
var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath);
foreach (var assemblyName in assembly.GetReferencedAssemblies()) {
Assembly.ReflectionOnlyLoad(assemblyName.FullName);
}
Dependency 1.1.0.0 没有解决不是问题,因为我在 foreach 中设置了一个断点并确认它已加载并检查 AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies() 因为它的存在。加载好了。但是当我执行 assembly.GetTypes() 时,它就死了。
对此我能做些什么吗,或者我是否必须在单独的 AppDomain 中反映程序集并将元数据编组回引用 Dependency 1.0.0.0 的 appdomain em>?
【问题讨论】:
标签: c# reflection assembly.reflectiononly