2016-04-03 64 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

謝謝。不幸的是,它不可能加載混合模式的組件。這是一個限制,不允許加載某些框架庫。這是問題嗎? –