TSQL命令“Create Assembly”在SQL Server上验证失败?

时间:2016-04-03 20:17:33

标签: sql-server clr sql-server-2014 sqlclr

我正在尝试将R language的自定义支持添加到SQL Server 2014中。

我想安装MEF,以允许这种情况发生。

我运行这个SQL ...

CREATE ASSEMBLY [System.ComponentModel.Composition]
AUTHORIZATION [dbo]
from 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.ComponentModel.Composition.dll'
WITH PERMISSION_SET = SAFE

...但是我收到了这个错误:

Warning: The Microsoft .NET Framework assembly 'system.componentmodel.composition, version=4.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details.
Msg 6218, Level 16, State 2, Line 56
CREATE ASSEMBLY for assembly 'System.ComponentModel.Composition' failed because assembly 'System.ComponentModel.Composition' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
[ : Microsoft.Internal.Assumes::NotNull[T]][mdToken=0x6000001][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.Assumes::NotNull[T1,T2]][mdToken=0x6000002][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.Assumes::NotNull[T1,T2,T3]][mdToken=0x6000003][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.Assumes::Null[T]][mdToken=0x6000005][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.Assumes::NotReachable[T]][mdToken=0x600000a][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.Assumes::NotNullOrEmpty][mdToken=0x6000004][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.Assumes::IsFalse][mdToken=0x6000006][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.Assumes::IsTrue][mdToken=0x6000007][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.Assumes::IsTrue][mdToken=0x6000008][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.Assumes::Fail][mdToken=0x6000009][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.AttributeServices::GetAttributes[T]][mdToken=0x600000b][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.AttributeServices::GetAttributes[T]][mdToken=0x600000c][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.AttributeServices::GetFirstAttribute[T]][mdToken=0x600000d][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.AttributeServices::GetFirstAttribute[T]][mdToken=0x600000e][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.AttributeServices::IsAttributeDefined[T]][mdToken=0x600000f][offset 0x00000000] Code size is zero.
[ : Microsoft.Internal.AttributeServices::IsAttributeDefined[T]][mdToken=0x6000010][offset 0...

1 个答案:

答案 0 :(得分:2)

事实证明我是using the "reference" .dll, not the actual "framework" .dll。这很好用:

CREATE ASSEMBLY [System.ComponentModel.Composition]
AUTHORIZATION [dbo]
from 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.ComponentModel.Composition.dll'
WITH PERMISSION_SET = UNSAFE

为避免猜测要导入哪个文件夹,请运行以下查询:

select * from sys.dm_clr_properties

enter image description here