exe和程序集可以在不同版本的.NET框架上运行吗?

时间:2014-04-03 12:51:20

标签: c# .net

这可能是一个愚蠢的问题但是这里...我有一个.NET exe,它使用另一个.NET程序集。如果exe目标是.NET 4.0,程序集目标是.NET 3.5,那么当我运行exe时,程序集实际上是在.NET 4.0框架上运行的吗?我怀疑它确实如此。我的问题是,是否可以在4.0框架上运行exe,但是使用在3.5框架上运行的程序集?

2 个答案:

答案 0 :(得分:5)

不,那是不可能的。在.NET 4.0中更改了基本类,如System.String。您的.NET 3.5程序集会说它依赖于mscorlib v2.0.0.0。但CLR将重新映射它,它实际上将获得4.0.0.0版本的程序集。因此,流程中的每个程序集都会同意字符串对象的外观。非常重要当然:))

.NET 4.0确实支持进程内并行CLR版本控制,一个进程可以加载多个CLR版本。但是在您的情况下不会发生这种情况,它意味着在非托管进程加载.NET代码时解决问题。像COM服务器一样。它运行隔离而不知道进程中存在任何其他.NET代码。因此可以提供不同的CLR版本。没有什么比你的情况好了。

.NET 4.0 非常与3.5兼容,并且3.5程序集中的代码不太可能失败。从技术上讲,微软使用4.0版本来修复一些可能破坏现有代码的未解决的bug修复。您的代码可能意外地依赖于此类错误。这种情况非常罕见,我在SO上只看到过一些关于这种事故的问题。

答案 1 :(得分:0)

我有很多.Net 4项目使用.Net 2 dll就好了(其中.Net 2库也支持遗留系统)。是的,但我不确定不同版本之间的完全兼容性。