【发布时间】:2015-01-07 09:50:42
【问题描述】:
我正在尝试在 SQL 中创建程序集,但无法加载以下 DLL。
System.ServiceModel.Internals
create assembly [system.servicemodel.internals]
from 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.ServiceModel.Internals.dll'
with permission_set = safe;
go
我收到此错误:
消息 6218,第 16 级,状态 2,第 2 行 为程序集“System.ServiceModel.Internals”创建程序集失败,因为程序集“System.ServiceModel.Internals”验证失败。检查引用的程序集是否是最新的并且受信任(对于 external_access 或不安全)以在数据库中执行。如果有任何 CLR 验证程序错误消息将跟随此消息 [ : System.Runtime.IOThreadScheduler+ScheduledOverlapped::.ctor][mdToken=0x6000185][offset 0x00000023][found unmanaged pointer][expected unmanaged pointer] 堆栈上的意外类型。 [ : System.Runtime.IOThreadScheduler+ScheduledOverlapped::Post][mdToken=0x6000183][offset 0x0000000D][found unmanaged pointer][expected unmanaged pointer] 堆栈上的意外类型。 [ : System.Runtime.IOThreadScheduler+ScheduledOverlapped::Cleanup][mdToken=0x6000184][offset 0x00000019][found unmanaged pointer][expected unmanaged pointer] 堆栈上的意外类型。 [ : System.Runtime.Diagnostics.DiagnosticsEventProvider::WriteMessageEvent][mdToken=0x6000357][offset 0x0000004B][found ref 'System.String'] 堆栈上的预期数字类型。 [ : System.Runtime.Diagnostics.DiagnosticsEventProvider::WriteEvent][mdToken=0x6000359][offset 0x0000012B] 指令无法验证。 [ : System.Runtime.Diagnostics.DiagnosticsEventProvider::WriteEvent][mdToken=0x6000359][offset 0x0000003F] 指令无法验证。 [ : System.Runtime.Diagnostics.DiagnosticsEventProvider::WriteEvent][mdToken=0x600035a][offset 0x00000061][found ref 'System.String'] 堆栈上的预期数字类型。 [ : System.Runtime.Diagnostics.DiagnosticsEventProvider::WriteEvent][mdToken=0x600035b][offset 0x0000001F][found unmanaged pointer][expected unmanaged pointer] 堆栈上的意外类型。 [ : System.Runtime.Diagnostics.DiagnosticsEventProvider::WriteTransferEvent][mdToken=0x600035c][offset 0x0000007C] 指令无法验证。 [ : System.Runtime.Diagnostics.DiagnosticsEventProvider::WriteTransferEvent][mdToken=0x600035c][offset 0x000002F4][found Native Int][expected unmanaged pointer] 堆栈上的意外类型。 [...
我看到了这个已解决的问题(几乎 100% 相似)Failed to CREATE AN ASSEMBLY in SQL 所以我尝试做同样的事情
.NET版本的SQL Server和文件相同v4.0.30319
我运行了select * from sys.dm_clr_properties的语句,结果似乎正常。
directory C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
version v4.0.30319
state CLR is initialized
SQL 版本: 11.2.5058.0
知道如何创建这个程序集吗?
我需要它,因为当我尝试创建自定义程序集时出现此错误:
Assembly 'DataLoader' references assembly 'system.servicemodel.internals, version=4.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2(The system cannot find the file specified.)). Please load the referenced assembly into the current database and retry your request.
【问题讨论】:
-
blacai 有这个运气吗?我也面临同样的问题
-
目前由于工作量,我无法测试提供的解决方案。如果您可以确认它有效,我将标记为答案
-
@blacai 我可以确认大卫曼宁的回答是正确的:这只是使用
UNSAFE的PERMISSION_SET而不是SAFE的问题。可以肯定的是,我正在运行 SQL Server 2012,从上面复制了您的 CREATE ASSEMBLY 代码,运行它,得到错误,将SAFE更改为UNSAFE,再次运行,它工作了。
标签: c# clr .net-assembly sqlclr