在SQL Server 2008上,我试图注册一个似乎只能引用supported libraries的程序集。下面是我使用注册程序集的T-SQL代码:为什么SQL Server不能将我的程序集注册为SAFE?
create assembly MySpatial from 'c:\Spatial.dll'
这将导致以下错误:
Msg 6509, Level 16, State 31, Line 1 An error occurred while gathering metadata from assembly 'Spatial' with HRESULT 0x80004005.
不过,如果我添加with permission_set=unsafe
,那么SQL将执行命令成功。我怎样才能找出错误发生的原因,或为什么我的程序集必须注册为不安全?
我与我的程序集有完全相同的问题。没有任何非''readonly'静态字段/属性,它只引用了安全的'mscorlib.dll'和'System.dll',都是v2。我试图将有限的一部分类复制到一个单独的文件中,并进行编译,这是有效的,所以有一些特定的东西阻止它被接受为安全的。 – 2010-01-28 12:54:36
我发现我的程序集有问题,它在'GetEnumerator()'方法中有一些lambda表达式,所以我将它们转换为常规方法+'new Func <>'(将它们转换为匿名方法并没有帮助) 。这使我可以将程序集添加到SQL Server而不会出现错误。我仍然不清楚为什么这些lambda表达式导致了这种情况(它们可以在SQL Server之外编译和运行)。 – 2010-01-28 14:19:15