【问题标题】:Is it guaranteed for two (or more) versions of the .NET Framework to be installed side by side?是否保证并排安装两个(或更多)版本的 .NET Framework?
【发布时间】:2019-10-23 00:24:38
【问题描述】:

根据我阅读的许多文章,我得出的结论是,不能保证 .NET Framework 100% 向后兼容以前的版本。所以我的问题是:是否保证两个(或更多)版本的 .NET Framework 可以并排安装而不会出现任何问题(Microsoft 是否在某处记录了这一点)?

例如,.NET 1.1 可以与 .NET 4.5 并排安装,还是我必须重新编译我的项目才能在 .NET 4.5 上运行?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    Framework 版本和运行时版本之间存在差异。如果您的应用程序在其配置文件中正确标记了预期的运行时,则您可以让不同的运行时并行运行而不会产生干扰。

    为特定运行时(例如 1.1、2.0、4.0)编写的程序可以独立于其给定框架运行,而不会受到其他框架的副作用。话虽如此,您必须modify your config file 确保在机器上安装 4.0 CLR 时 .NET 2.0 应用程序与 .NET 2.0 CLR 一起运行

    CLR 受机器上安装的框架版本的影响。例如,4.0 和 4.5 都与 4.0 CLR 一起运行,并且安装了 4.5 会引入一些不兼容性。话虽如此,这些问题通常非常具体,大多数应用程序不会受到它们的影响。

    这是框架版本之间的Microsoft's page on compatibility

    【讨论】:

    • 你的意思是如果CLR 4.0和CLR 4.5安装在同一台机器上,会导致一些不兼容?
    • 4.5 安装在机器上会更改 CLR。见stackoverflow.com/questions/8810391/…
    • 这是一个错误吗?我的意思是,如果有人使用 .net 4.0 创建应用程序,那么如果安装了 .net 4.0,他应该除了应用程序运行没有任何问题,而不管安装了任何其他东西!
    • 我不会这么说的。 .NET 4.0 已经快 5 年了,即将结束生命,不兼容的问题是非常极端的情况,大多数开发人员不会遇到它们。 Microsoft 拥有业内最好的向后兼容系统之一。大多数 5 年前为其他系统编写的东西也无法在不修改的情况下运行,但大多数 .NET 应用程序仍然可以正常运行
    • 听起来你没有回答“并排”部分。
    【解决方案2】:

    您的问题似乎分为两部分:

    1. .NET Framework 是否向后兼容?
    2. 您能否在同一台计算机上同时安装多个 .NET Framework?

    是的,您可以同时安装 “.NET Framework” 的多个版本而不会出现问题。应用程序是否按预期运行是另一回事,如 MSDN 文档中所述。

    MSDN:

    您可以在一台计算机上同时加载.NET Framework多个版本。这意味着您无需卸载以前的版本即可安装 .NET Framework Tell me more

    ...和

    一般情况下,您不应卸载计算机上安装的任何版本的 .NET Framework。有两个原因: 如果您使用的应用程序依赖于特定版本的 .NET Framework,则如果删除该版本,该应用程序可能会中断。 .NET Framework 的某些版本是对早期版本的就地更新。例如,.NET Framework 3.5 是对版本 2.0 的就地更新,而 .NET Framework 4.5.2 是对版本 4、4.5 和 4.5.1 的就地更新。 Golly, tell me more

    向后兼容性

    虽然框架的较新版本通常向后兼容(就合约而言),但在运行时可能会出现不可预见的行为变化。

    正如 MSDN 所述:

    .NET Framework 4.5 及其单点版本与使用早期版本的 .NET Framework 构建的应用向后兼容。换句话说,使用以前版本构建的应用程序和组件无需修改即可在 .NET Framework 4.5 上运行

    ...然而:

    实际上,这种兼容性可能会被 .NET Framework 中看似无关紧要的更改和编程技术的更改破坏。例如,.NET Framework 4 中的性能改进可能会暴露早期版本中没有出现的竞态条件More

    因此,没有适当配置的应用可能会升级为使用更高版本的库,从而导致不良结果。遗憾的是,如果安装了 .NET 4.5,那么对于 4.0 应用程序将无能为力,因为实际的 CLR 已更改。 More...

    正如 Rick Strahl 所写:

    请注意,这种就地替换与 .NET 2.0 和 3.0/3.5 的并行安装非常不同,它们都在 2.0 版本的 CLR 上运行。这两个 3.x 版本基本上是在核心 .NET 2.0 运行时之上的库增强。两个版本都在 .NET 2.0 运行时下运行,在整个 3.x 周期中都没有改变(除了安全补丁和错误修复)。 4.5 更新完全替换了 .NET 4.0 运行时,并将实际版本号设置为 v4.0.30319。 More...

    【讨论】:

    • 机器上只有 4.5 运行时会导致问题。 4.5 运行时更改了机器上的 CLR,您不再能够在其原始框架上运行 4.0。实际上,我刚刚完成了一个项目,我们确实遇到了这些不兼容问题,这是一个基于 4.5 的新组件(强制更新)导致了问题。
    【解决方案3】:

    到目前为止,我们只看到以下框架可以并排运行,

    • .NET 1.x(已经过时,所以不想多加评论)
    • .NET 2.0/3.0/3.5 整体
    • .NET 4.0/4.5/4.5.1/4.6 整体
    • .NET 核心

    而且你可以看到,微软并不能保证新版本是否可以并排安装或者是对旧版本的就地升级,这实际上取决于新版本带来的功能集。

    我们可能会遵守一些一般规则(例如具有相同 CLR 版本的框架应该就地升级),但这仍然不是 Microsoft 所保证的,并且可能会被未来的框架版本打破。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      相关资源
      最近更新 更多