在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