24

在最近重新启动我们的开发服务器期间,SQL Server开始使用.NET 4.0SQLCLR。这意味着在 SQL 中使用 CLR 没有任何效果,或者至少这是我通过阅读这些来源的理解:

http://software.intel.com/en-us/blogs/2009/10/16/sql-server-2008-sqlclr-net-framework-version/

www.sqlskills.com/BLOGS/BOBB/post/On-SQL-Server-and-NET-40.aspx

我们得到的只是这种类型的错误消息:

消息 6517,级别 16,状态 1,第 1 行无法创建 AppDomain“xxx.dbo[ddl].3”。方法的类型签名与互操作不兼容。

运行语句(由@john-christensen 建议)

select * from sys.dm_clr_properties

产生以下信息:

*Name*      *Value*
directory   C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
version     v4.0.30319
state       CLR is initialized

有谁知道如何解决这个问题,或者我们如何强制 SQL Server CLR 使用较早版本的框架?

4

6 回答 6

14

我遇到了同样烦人的问题。我的数据库中的地理/几何资料都不起作用。花了我一些不成功的 SQL 服务器重新安装最终(几周后!)发现我的注册表中的以下键已设置为“1”

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\OnlyUseLatestCLR

当我将其重置为“0”并重新启动机器时,一切又恢复了!

汉斯

于 2010-06-29T10:33:24.843 回答
12

Typically you can force a .NET application to use a specific .NET Framework version by specifying the supportedRuntime tag in the application's config file.

因此,您可以尝试在 SQL 实例的根路径下的文件夹中创建一个sqlservr.exe.config,并\Binn在此处指定您希望仅使用 .NET 最高 3.5 的版本。检查此 MSDN 链接以了解配置文件的结构。

于 2010-05-06T15:58:31.063 回答
9

从这篇文章和我在网络上的研究来看,看起来可能会发生相反的情况——你可能会注册一个 4.0 DLL 吗?似乎 SQL Server 2008 将始终加载 2.0 CLR 而不是 4.0 CLR。尝试运行这个语句,它会告诉你你的 SQL 服务器正在运行什么版本:

从 sys.dm_clr_properties 中选择 *

于 2010-05-06T14:14:10.747 回答
7

在您引用的英特尔帖子中,如果您仔细阅读,它会说:

SQL Server 2008 and the forthcoming SQL Server 2008 R2 release, previously codenamed "Kilimanjaro", will both continue to load the latest service release of the version 2.0 CLR.

And later on:

While future versions of SQL Server may load newer versions of the CLR, or even support the loading of multiple CLR's within the process, version 2.0 of the CLR is here to stay for SQLCLR within SQL Server 2008 and SQL Server 2008 R2.

I don't know how you manage to get something like .NET 4 loaded inside SQL Server 2008 R2....

于 2010-05-06T15:02:32.517 回答
1

他们做出了明确的选择,以确保 .NET 4.0 的安装不会产生影响。它不应该使用 .NET 4.0 或任何新文件,除了新的 shim 文件 mscoree.dll 和 mscoreei.dll。这些应该与 2.0 运行时向后兼容。您可以运行 Process Explorer 来查看加载的 dll 的版本号,以验证它是否正在运行正确的运行时。

于 2010-05-06T14:12:40.260 回答
0

我有这个问题一天,更新我的 Windows 和 .NET 框架后问题消失了。问题与 .Net 框架有关,尝试修复它。

于 2015-03-18T17:13:34.407 回答