1

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

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

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

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

4

3 回答 3

4

没有“.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 项目中避免这些新程序集并不困难。如果你弄错了,你会得到一个快速的例外。

于 2012-11-20T12:58:05.040 回答
1

我认为您第一个假设“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 程序集了。

于 2012-11-20T12:28:22.450 回答
0

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

于 2012-11-20T12:09:15.393 回答