SQLCLR使用错误版本的.NET Framework

Tob*_*bom 24 .net sql-server sqlclr sql-server-2008-r2

在最近重新启动我们的开发服务器期间,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".方法的类型签名不是Interop兼容的.

运行声明(由@ john-christensen建议)

select * from sys.dm_clr_properties
Run Code Online (Sandbox Code Playgroud)

得到以下信息:

*Name*      *Value*
directory   C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
version     v4.0.30319
state       CLR is initialized
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个或如何强制SQL Server CLR使用早期版本的框架?

小智 14

我遇到了同样恼人的问题.我的数据库中的Geography/Geometry东西都没有工作.最后给我一些不成功的重新安装SQL服务器(几周后!)发现我的注册表中的以下密钥已设置为'1'

HKEY_LOCAL_MACHINE\SOFTWARE \微软\ .NETFramework\OnlyUseLatestCLR

当我将其重置为'0',并重新启动机器时,事情再次奏效!

汉斯


Mic*_*Sim 12

通常,您可以通过supportedRuntime在应用程序的配置文件中指定标记来强制.NET应用程序使用特定的.NET Framework版本.

因此,您可以尝试在SQL实例的根路径下sqlservr.exe.config\Binn文件夹中创建一个,并在那里指定您只想使用最高3.5的.NET版本.检查此MSDN链接以获取配置文件的结构.


Joh*_*sen 8

从文章和我在网络上的研究看起来可能正好相反 - 你有可能注册4.0 DLL吗?似乎SQL Server 2008将始终加载2.0 CLR而不是4.0 CLR.尝试运行此语句,它将告诉您SQL Server正在运行的版本:

从sys.dm_clr_properties中选择*


mar*_*c_s 7

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

SQL Server 2008和即将发布的SQL Server 2008 R2版本(以前代号为"Kilimanjaro")将继续加载2.0版CLR的最新服务版本.

后来:

虽然SQL Server的未来版本可能会加载更新版本的CLR,甚至支持在此过程中加载多个CLR ,但CLR的2.0版本仍然适用于SQL Server 2008和SQL Server 2008 R2中的SQLCLR.

我不知道你是如何设法在SQL Server 2008 R2中加载.NET 4的....