这是使用Assembly.ReflectionOnlyLoadFrom的场景:
我的 assembly Inspected和我的反射 Application Inspector都引用了 Assembly 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 ?