【发布时间】:2019-10-23 00:24:38
【问题描述】:
根据我阅读的许多文章,我得出的结论是,不能保证 .NET Framework 100% 向后兼容以前的版本。所以我的问题是:是否保证两个(或更多)版本的 .NET Framework 可以并排安装而不会出现任何问题(Microsoft 是否在某处记录了这一点)?
例如,.NET 1.1 可以与 .NET 4.5 并排安装,还是我必须重新编译我的项目才能在 .NET 4.5 上运行?
【问题讨论】:
根据我阅读的许多文章,我得出的结论是,不能保证 .NET Framework 100% 向后兼容以前的版本。所以我的问题是:是否保证两个(或更多)版本的 .NET Framework 可以并排安装而不会出现任何问题(Microsoft 是否在某处记录了这一点)?
例如,.NET 1.1 可以与 .NET 4.5 并排安装,还是我必须重新编译我的项目才能在 .NET 4.5 上运行?
【问题讨论】:
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。
【讨论】:
您的问题似乎分为两部分:
是的,您可以同时安装 “.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...
【讨论】:
到目前为止,我们只看到以下框架可以并排运行,
而且你可以看到,微软并不能保证新版本是否可以并排安装或者是对旧版本的就地升级,这实际上取决于新版本带来的功能集。
我们可能会遵守一些一般规则(例如具有相同 CLR 版本的框架应该就地升级),但这仍然不是 Microsoft 所保证的,并且可能会被未来的框架版本打破。
【讨论】: