SQL Server SQLCLR使用错误版本的.NET Framework

6yt4nkrj  于 2023-02-07  发布在  .NET
关注(0)|答案(6)|浏览(181)

在最近重新启动我们的开发服务器时,SQL Server开始使用.NET 4.0来实现SQLCLR,这意味着在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使用早期版本的框架吗?

2ledvvac

2ledvvac1#

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\\.NETFramework\OnlyUseLatestCLR

当我将它重置为“0”,并重新启动机器时,事情又开始工作了!

iezvtpos

iezvtpos2#

通常,您可以通过在应用程序的配置文件中指定supportedRuntime标记来强制.NET应用程序使用特定的.NET Framework版本。
因此,您可以尝试在SQL示例根路径下的\Binn文件夹中创建一个sqlservr.exe.config,并在其中指定您只想使用3.5版以下的.NET版本。请检查this MSDN link以了解配置文件的结构。

bejyjqdl

bejyjqdl3#

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

select * from sys.dm_clr_properties
dba5bblo

dba5bblo4#

在您提到的英特尔职位中,如果您仔细阅读,您会发现:
SQL Server 2008和即将发布的SQL Server 2008 R2版本(以前的代号为“基利曼哈罗”)都将继续加载CLR2.0版的最新服务版本。
稍后:
虽然SQL Server的未来版本可能会加载较新版本的CLR,甚至支持在进程中加载多个CLR,但CLR 2.0版将继续用于SQL Server 2008和SQL Server 2008 R2中的SQLCLR。
我不知道您是如何设法在SQL Server 2008 R2中加载.NET 4之类的内容的......

kg7wmglp

kg7wmglp5#

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

afdcj2ne

afdcj2ne6#

我有这个问题的一天,更新我的windows和.NET框架后,问题消失了。该问题涉及到.NET框架尝试修复它。

相关问题