2016-04-03 68 views
1

我正在试验将R language的定制支持添加到SQL Server 2014中。TSQL命令“创建程序集”在SQL Server上验证失败?

我想安装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

事实证明,我是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 

为了避免猜测从导入的文件夹,运行此查询:如果有人发现关于[参考VS实际DLL]链接的答案

select * from sys.dm_clr_properties 

enter image description here

+0

(http://stackoverflow.com/questions/24835036/cant-add-system-io-compression-to-trusted-assemblies-in-sql-server)有用,请不要忘记upvote这个答案;-)。 –

+1

完成!如果你能想出一种将混合模式程序集加载到SQLCLR的方法,我会找出一种方法来给你50个声望:) – Contango

+0

谢谢。不幸的是,它不可能加载混合模式的组件。这是一个限制,不允许加载某些框架库。这是问题吗? –