exe和汇编可以在不同版本的.NET框架上运行吗?

本文关键字:框架 NET 运行 版本 汇编 exe | 更新日期: 2023-09-27 17:56:19

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

exe和汇编可以在不同版本的.NET框架上运行吗?

不,这是不可能的。 基本类在 .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 程序集中的代码不太可能失败。 从技术上讲,这是可能的,Microsoft使用4.0版本修复了许多未完成的错误修复,这些错误有可能破坏现有代码。 您的代码可能会意外地依赖于此类错误。 这种情况非常罕见,我在SO只看到过一些关于这种事故的问题。

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