c# - exe和assembly可以运行在不同版本的.NET framework上吗?

标签 c# .net

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

最佳答案

不,那是不可能的。 .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 版本修复了许多 Unresolved 错误修复,这些错误修复有可能破坏现有代码。您的代码可能不小心依赖于此类错误。这种情况非常罕见,我只在 SO 看到过一些关于此类事故的问题。

关于c# - exe和assembly可以运行在不同版本的.NET framework上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22838344/

相关文章:

c# - 列表的哪个 gridview 触发事件

c# - 打开内容已填满的 outlook 新电子邮件窗口

c# - 更新后 Insights 中的 Xamarin iOS 对象处置异常

.net - 是否可以从另一个进程捕获 "file not found",然后将文件返回给该进程?

.net - vb6 到 vb.net dll 兼容版本

c# - 引用分配是原子的,那么为什么需要 Interlocked.Exchange(ref Object, Object) 呢?

c# - 将 JSON 对象传递给 MVC

.net - 带有绑定(bind)列表框的 WPF/DeferRefresh

c# - 找出键盘布局何时更改

c# - 替代 Thread.Sleep?在 C# 中