2014-11-21 60 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

相关问题