2014-11-21 90 views
2

我正在嘗試從特定的dll創建程序集。我執行命令是由於對.net程序集的引用而無法創建程序集

從 CREATE ASSEMBLY 「xx.xx.blobviewer」 'd:\ XX \ XX \ XX \ BlobSniffer \ BlobSniffer.dll' WITH PERMISSION_SET =不安全

的消息我得到的響應是:

大會 'BlobSniffer' 的引用組件 'system.runtime.serialization,版本= 4.0.0.0,文化=中性 公鑰= b77a5c561934e089',它不存在於目前的0123數據庫。 SQL Server試圖從引用程序集 來自的相同位置找到並自動加載引用的程序集,但該操作已失敗(原因:2(系統不能 找到指定的文件))。請將引用的程序集加載到當前數據庫的 中,然後重試您的請求。

我試圖複製要求的.NET的DLL-S到BlobSniffer文件夾,但之後,我複製所有引用的程序我得到這個:

CREATE ASSEMBLY裝配 'BlobSniffer' 失敗,因爲裝配 'microsoft.visualbasic.activities.compiler'格式不正確或不是純粹的.NET程序集。無法驗證的PE標頭/本地存根。

第一個問題,爲什麼我甚至需要複製.net程序集,是不是應該自動檢索?

第二個問題,裝配被標記爲畸形的有什麼問題?該程序集也是.net框架的一部分,並且沒有外部類。

+1

omegasbk:不知道您是否注意到了,但@rolo發佈了一個非常正確的答案。爲了確保你的第一個問題得到直接回答,我在答覆的評論中增加了一些細節。但是,這個答案非常重要。有關使用SQLCLR的更多信息,我正在SQL Server Central上編寫一系列名爲[SQLCLR的階梯](http://www.sqlservercentral.com/stairway/105855/)(需要免費註冊)。級別5「在SQL Server中使用.NET」專門處理此問題。 – 2015-08-17 04:25:39

回答

4

到這裏看看:

http://msdn.microsoft.com/en-us/library/ms189524.aspx

這套它引用是SQL Server以下支持組件的一個系統組件:

  • Microsoft.VisualBasic.dll中
  • Mscorlib.dll
  • System.Data.dll
  • System.dll中
  • system.xml.dll的
  • Microsoft.Visualc.dll
  • Custommarshallers.dll
  • System.Security.dll
  • System.Web.Services.dll
  • 系統.Data.SqlXml.dll
  • System.Core.dll
  • System.Xml.Linq。dll

其他系統程序集可以被引用,但它們必須顯式註冊在數據庫中。

http://blogs.msdn.com/b/psssql/archive/2013/02/23/unable-to-register-net-framework-assembly-not-in-the-supported-list.aspx

無論哪個版本的SQL Server,CREATE ASSEMBLY只允許純.NET程序集註冊。 SQL Server始終要求使用CREATE ASSEMBLY加載到SQL Server數據庫中的程序集僅包含MSIL指令(純裝配)。如果要註冊的程序集是混合程序集,則CREATE ASSEMBLY將引發上述錯誤。

我希望這會有所幫助。

+1

這是非常重要的。 +1。爲了更全面地回答原始問題,我唯一要補充的是,「爲什麼」必須複製DLL的原因是SQL Server的CLR主機受到高度限制,並且不會自動加載任何程序集,因此它不需要搜索路徑來查找庫。程序集需要手動註冊,並且SQL Server只會在相同的文件夾中查找相關的程序集。 – 2015-08-17 04:16:43