2012-09-27 52 views
12

假设系统安装了.NET 4.0和.NET 4.5。在.NET 4.0应用程序域中加载针对.NET 4.5的程序集

是否有可能加载和针对.NET 4.0编写的组件与.NET 4.5装配工作?

简单地说,我可以调用Assembly.Load从.NET 4.0的代码加载.NET 4.5靶组件?

+2

你会想读此:http://marcgravell.blogspot.nl/2012/09/iterator-blocks-missing-methods-and-net.html过! – sehe

+0

为什么不调整其他项目的构建设置以使用.NET4.5? –

+1

@ShaunWilde有时候这是不可能的。您可以在一家公司拥有多个团队或应用程序,一个拥有.NET 4.5,一个使用.NET 4.0。在理想的世界中,这不会发生,但在现实世界中,它经常发生。有时你需要在两者之间进行互操作。 – Nuzzolilo

回答

11

假设系统如.NET 4.0和.NET 4.5:

marcgravell's blog指出由sehe

4.5链接是就地过度的顶部上的顶部4.0安装,在GAC中;一旦你已经安装了4.5,4.0运行与4.5组件

然后从瞄准4.0(由4.0编译器编译)一个.NET代码调用Assembly.Load,将在实际使用4.5框架实现运行,所以我没有看到它无法加载4.5程序集的任何原因。

margravell指出,当您尝试只安装4.0的系统上运行.NET 4.5编译的代码出现问题,作为屈服回报执行/突破迭代导致缺少方法参考。但是这不应该影响你。

+4

它是如何在默认情况下不起作用的? - 你需要做些什么才能使其发挥作用? – BrainSlugs83

+0

显然.net-4.5在某些情况下尝试表现得像.net-4.0一样。例如,'System.ComponentModel.Composition'拒绝通过初始化为.net-4.0的程序加载的.net-4.5程序集加载时关闭打开的泛型类型。这点点我,因为我没有意识到框架运行在.net-4.0模式,我无法猜测这可能是不同行为的原因。 – binki

相关问题