Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLCLR使用了错误版本的.NET Framework_.net_Sql Server_Sqlclr_Sql Server 2008 R2 - Fatal编程技术网

SQLCLR使用了错误版本的.NET Framework

SQLCLR使用了错误版本的.NET Framework,.net,sql-server,sqlclr,sql-server-2008-r2,.net,Sql Server,Sqlclr,Sql Server 2008 R2,在最近重新启动我们的开发服务器期间,SQL server开始对SQLCLR使用.NET 4.0。这意味着在SQL中使用CLR不会起任何作用,或者至少我通过阅读以下来源了解到这一点: 我们得到的只是这种类型的错误消息: Msg 6517,级别16,状态1,第1行无法创建AppDomain “xxx.dbo[ddl].3”。方法的类型签名不兼容互操作 运行声明(由@john christensen建议) 结果显示以下信息: *Name* *Value* directory C:\W

在最近重新启动我们的开发服务器期间,
SQL server
开始对SQLCLR使用
.NET 4.0
。这意味着在SQL中使用CLR不会起任何作用,或者至少我通过阅读以下来源了解到这一点:

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

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

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

结果显示以下信息:

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

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

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

从文章和我在web上的研究来看,情况可能正好相反-您可能正在注册4.0 dll吗?SQL Server 2008似乎总是加载2.0 CLR,而不是4.0 CLR。尝试运行此语句,它将告诉您SQL server正在运行的版本:


在您在英特尔发布的文章中选择*from sys.dm_clr_properties,如果仔细阅读,它会显示:

SQL Server 2008和即将发布的 SQL Server 2008 R2版本,以前版本 代号为“乞力马扎罗”将 继续加载最新的服务 2.0版CLR的发布

后来:

而SQL Server的未来版本 可能会加载较新版本的CLR,或 甚至支持加载多个 进程中的CLR,2.0版 对于SQLCLR,CLR的 在SQL Server 2008和SQL Server中 2008 R2.


我不知道如何在SQL Server 2008 R2中加载类似.NET 4的内容……

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


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

我遇到了同样的恼人问题。我数据库中的地理/几何内容都不起作用。我重新安装了一些失败的SQL server,终于(几周后!)在我的注册表中找到以下项已设置为“1”

HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\.NETFramework\ONLYSELATESTCLR

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


Hans

我有这个问题一天了,在更新windows和.NET framework之后,问题消失了。这个问题与.NET framework有关。请尝试修复它。

当我运行select*from sys.dm_clr_属性时,我得到以下信息:“目录:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\version:v4.0.30319状态:CLR已初始化”,这对我来说表示使用的是v4.0。我还将对该语句的响应添加到了主要问题中。
*Name*      *Value*
directory   C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
version     v4.0.30319
state       CLR is initialized