.NET Frameworks 从 3.5 到 2.0 的向前兼容性

Posted

技术标签:

【中文标题】.NET Frameworks 从 3.5 到 2.0 的向前兼容性【英文标题】:Forward compatibility of .NET Frameworks from 3.5 to 2.0 【发布时间】:2012-11-08 10:41:37 【问题描述】:

我正在寻找有关 .NET 框架特定版本之间向前兼容性的可靠建议。

为了清楚起见,假设我们讨论的是仅支持 .NET 2.0 的 SQL Server 2008,并且我们在其中加载了一个带有存储过程的 v3.5 程序集,以及它的所有 v3.5 依赖项。

一方面,我们知道.NET 框架是mostly backward compatible。 我们也知道forward compatibility is only supported for framework 1.1,而且还不止于此。

但是,the CLR version for frameworks 2.0, 3.0, and 3.5 is the same:CLR 2.0。

这些事实如何结合? “CLR 相同”的事实能否获胜?是否可以说,由于三个 FW 版本之间的 CLR 版本相同,只要还引入了所有依赖项,就可以安全地将 v3.5 代码引入 v2.0 环境?在哪种情况下,我们可以将“不支持前向兼容性”通知视为在一般情况下正确,但在 v3.5-v2.0 关系的特定情况下不正确?

(我们实际上已经尝试将具有所有依赖项的 v3.5 程序集导入 SQL Server 2008。它有效。但我想知道它是因为它应该有效,还是因为脆弱的魔法。) em>

【问题讨论】:

【参考方案1】:

没有“.NET 3.5 程序集”这样的东西。印在程序集上的唯一版本是它所需的运行时版本。对于由 .NET 2.0 到 3.5 SP1 包含的编译器构建的任何程序集,它是 v2.0.50727。进一步扭曲,这确实指定了程序集中元数据的格式。只有 CLR 版本 2 或更高版本可以读取程序集中的清单。这种格式在 4.0 中发生了变化,这是您需要 CLR 版本 4 来执行针对 4 的程序集的核心原因。

框架版本 2.0 到 3.5 SP1 之间的唯一区别在于包含的程序集集。当您面向 3.0 或更高版本时,您只能添加对 WPF PresentationFramework 程序集的程序集引用。您只能在面向 3.5 时添加 System.Core。

在 SQL 项目中避免使用这些新程序集并不困难。如果你弄错了,你会得到一个快速的异常。

【讨论】:

【参考方案2】:

我认为您第一个假设“SQL Server 2008 仅支持 .NET 2”是错误的,因此以下所有讨论都将毫无意义。

如果您看一下这篇文章,您会发现支持 .NET 3.5,因为 System.Core 仅支持 .NET 3.5,

http://msdn.microsoft.com/en-us/library/ms403279(v=sql.100).aspx

现在您可以放心地使用您的 .NET 3.5 程序集了。

【讨论】:

【参考方案3】:

SQL Server 加载与 3.x 兼容的 2.0 CLR。所以,是的,“CLR 版本相同”获胜。

【讨论】:

我认为你的评论充满了歧义。这里的兼容是什么意思?你是怎么跳到“是”的?我不会投反对票,但希望你能说清楚。

以上是关于.NET Frameworks 从 3.5 到 2.0 的向前兼容性的主要内容,如果未能解决你的问题,请参考以下文章

从 .NET 3.5 转换到 .NET 2.0

如何在 .NET 2.0/3.5 中将(字符串)消息从一个线程异步排队到另一个线程?

从 .Net 2 -> 3.5 SP1 WindowsForms:WindowsForms ControlDesigner / CollectionEditor 丢失?

将 Web 应用程序从 2.0 迁移到 3.5 框架的最快和最佳方法?

.NET 3.5CF WebRequest 到 Slim 框架

将 VB.NET 2.0 Winform 迁移到 3.5 WPF