【问题标题】:Running .NET versions 2.0 and 3.x on the same computer在同一台计算机上运行 .NET 版本 2.0 和 3.x
【发布时间】:2014-08-08 05:24:31
【问题描述】:

这是来自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 过程。

从上一段:

不能同时运行 2.0、3.0 和 3.5 版本 电脑。

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

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

这是我最大的问题。有人可以一劳永逸地确认,在 .net 4.0 中引入的进程并行执行是否适用于所有 .net 进程或仅适用于使用托管 COM 插件的本机 COM 应用程序?如上所示,一些 MSDN 文章做出了一般性声明,有些人说它仅适用于 COM 插件。那么是哪一个呢?

【问题讨论】:

    标签: .net .net-4.0


    【解决方案1】:

    .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 的就地替换。但这是另一个答案。

    【讨论】:

    • 谢谢科迪。所以你说有可能有一个加载.net 2.0 dll和.net 4.0 dll的.net 4.0应用程序,并且该进程将加载两个CLR来支持这个?而不是使用 4.0 dll 的 2.0 dll 将 2.0 dll 加载到 3.5 进程中工作的方式?这是自动完成的吗?另外,如何确认应用程序已加载两个 CLR?
    • 另外,你是说如果你有一个在安装了 .net 2.0 和 3.5 的系统上运行的 .net 2.0 应用程序,那么它将使用 3.5 框架库而不是 2.0?!!
    • 好像这还不够令人困惑,请查看 MS 的 Rich Lander 在 MSDN 上给我的答案。你怎么看这个? blogs.msdn.com/b/dotnet/archive/2009/06/03/…
    猜你喜欢
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2011-09-18
    • 2020-06-26
    • 2010-09-25
    相关资源
    最近更新 更多