在同一台计算机上运行.NET版本2.0和3.x.

时间:2014-06-18 03:40:13

标签: .net .net-4.0

这是this MSDN文章的摘录:

针对旧版本定位和运行应用

  

.NET Framework版本2.0,3.0和3.5使用相同的版本构建   版本的CLR(CLR 2.0)。这些版本代表连续   单个安装的层。每个版本都是逐步构建的   在早期版本之上。无法运行版本   2.0,3.0和3.5并排在计算机上。当您安装3.5版时,您将自动获得2.0和3.0层,而为版本2.0,3.0和3.5构建的应用程序都可以在3.5版上运行。   但是,.NET Framework 4结束了这种分层方法,因此应用程序   为2.0而建。 3.0或3.5将无法在版本4或更高版本上运行。   从.NET Framework 4开始,您可以使用进程内   并排托管以在单个版本中运行多个版本的CLR   过程

从以上段落:

  

无法在a上并行运行版本2.0,3.0和3.5   计算机。

这肯定不是真的吗?我绝对可以在同一台机器上运行使用2.0和3.5的应用程序。

  

从.NET Framework 4开始,您可以使用进程内   并排托管以在单个版本中运行多个版本的CLR   过程

这是我最大的问题。有人可以一劳永逸地确认在.net 4.0中引入的并行执行是否适用于所有.net进程或仅使用托管COM添加的本机COM应用程序?一些MSDN文章如上所述制作了一个通用语句,有些人说它只适用于COM add ins。那是哪一个呢?

1 个答案:

答案 0 :(得分:2)

.NET 2.0是CLR的全新版本,与旧版本.NET 1.0或1.1不兼容。但是,.NET 3.0和3.5是在.NET 2.0 CLR之上构建的扩展。他们添加了2.0中没有的功能(例如,WPF和LINQ),并修复了CLR中的错误,但它们被严格设计为超集。从这个意义上说,不可能在同一台机器上并排安装.NET 2.0,3.0和3.5。没有.NET 2.0没有.NET 3.0 / 3.5。您安装的最新版本将有效地替换另一个版本。针对较旧版本的应用将继续在较新版本上运行,因为所有必需的部分仍然存在。

所以文件中的陈述:

  

无法在计算机上并排运行版本2.0,3.0和3.5。

是真的。你的解释是不正确的。您当然可以安装目标2.0和3.5的不同应用程序,它们将继续运行。但他们都使用相同的CLR。

至于您的第二个问题,关于并行执行,所有版本的.NET Framework都支持托管应用程序的并行托管。您可以同时安装.NET 1.0,1.1和2.0,并且应用程序可以获得他们所针对的框架的任何版本。

只有当您的插件针对不同版本的CLR而不是主机应用程序时才会出现问题。这些都运行在CLR的错误/意外版本上并且有意外行为(即错误),或者他们拒绝完全加载。

这个问题因版本3.0和3.5而受到影响,因为正如我上面所解释的那样,它们建立在.NET 2.0 CLR之上 - 即所谓的"层蛋糕"模型。 4.0版引入了进程并行执行,它允许在单个进程中托管多个版本的CLR。这样,应用程序获取它所针对的CLR的版本,它托管的任何加载项将获得它们在App.config文件中请求的CLR的版本。 InProc SxS可用于加载CLR的所有进程。您在阅读文档时的困惑可能源于COM加载项是最常见的事实,因此是大多数文章的主题。另一个常见用例是使用多个托管加载项的本机应用程序,每个加载项都针对不同版本的CLR。

This article from the MSDN Magazine有一些有趣且相关的花絮。

哦,顺便说一句,.NET 4.5使用了完全不同的模型。它实际上是.NET 4.0 DLL的就地替换。但这是另一个答案。