2010-02-24 38 views
0

下面是使用Assembly.ReflectionOnlyLoadFrom场景的不同版本的依赖关系:不能反映在组件共享

我的两个组装视察和我的倒影应用督察参考大会依赖

如果督察引用依赖1.0.0.0检查引用依赖1.1.0.0督察不能反映在任何类型或方法在检查使用类型从依赖关系。这种类型被击中的那一刻,我得到:

System.IO.FileLoadException:无法 加载文件或程序集的依赖, 版本= 1.1.0.0,文化=中立, 公钥=空'或一个其 依赖关系。找到的程序集 清单定义不匹配 集引用。 (异常来自HRESULT :0x80131040)

然而,督察可以反映过来依赖1.1.0.0本身就好了,所以加载依赖1.1.0.0大会。 ReflectionOnlyLoad从确实已在使用的程序集中工作依赖关系1.0.0.0

这里是我用来加载程序集,并预装它的依赖代码:

var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath); 
foreach (var assemblyName in assembly.GetReferencedAssemblies()) { 
    Assembly.ReflectionOnlyLoad(assemblyName.FullName); 
} 

这不是与相关的问题1.1.0.0没有得到解决,因为我已经设置断点在foreach中,并确认它已加载并且还检查AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies()的存在。它装好了。但是,当我然后做assembly.GetTypes(),它死亡。

有什么我能做到这一点,还是我必须反映过来在一个单独的AppDomain和马歇尔的元数据备份到具有以依赖1.0.0参考的AppDomain的组件。0

回答

0

Customizing the .NET Framework Common Language Runtime中,解释了Load和LoadFrom为加载的程序集创建了单独的“作用域”,我想这可以解释这个问题。 需要尝试的是自己找到程序集并使用LoadFrom加载它们。

您是否尝试过处理AppDomain.AssemblyResolve事件?

+0

我尝试了AppDomain.AssemblyResolve和AppDomain.ReflectionOnlyAssemblyResolve,都没有开除。我认为这是因为它已经加载了不同的版本。我会看看我是否只能使用LoadFrom。 – 2010-02-24 15:35:15

+0

原来这是使用LoadFrom加载依赖项的问题。我最初的测试失败,但由于其他原因。现在都好。 – 2010-02-26 06:21:08

+0

第二个想法是有道理的,因为有.NET加载的DLL本身,这是用Load而不是LoadFrom完成的。所以,正确的建议应该是尝试和没有LoadFrom – Timores 2010-02-26 06:46:34