我正在寻找有关.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是否相同”的事实?我们可以这么说,因为CLR版本在三个FW版本之间是相同的,所以v3.5代码可以安全地引入到v2.0环境中,前提是它还引入了所有依赖项吗?在这种情况下,我们可以忽略“不支持的前向兼容性”通知在一般情况下是正确的,但在v3.5-v2.0关系的特定情况下却不正确吗?
(我们已经尝试将带有所有依赖项的v3.5程序集导入SQL Server 2008.它可以工作。但我想知道它是否有效,因为它应该,或者因为一个脆弱的魔法。)
答案 0 :(得分: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项目中避免这些新程序集并不困难。如果你弄错了,你会得到一个快速的例外。
答案 1 :(得分: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程序集。
答案 2 :(得分:0)
SQL Server加载2.0 CLR,它与3.x兼容。所以,是的," CLR版本是相同的"胜。