数据库
首页 > 数据库> > c# – 引用SQL Server 2008R2中的签名程序集

c# – 引用SQL Server 2008R2中的签名程序集

作者:互联网

我有一个在某些SSIS脚本任务中使用的C#.NET 3.5类库(DLL),因此必须将其加载到GAC,这意味着它必须已签名.我创建了一个密钥并签署了DLL,它在SSIS中工作.

现在我还想将此DLL加载到SQL服务器,并创建一些引用此DLL中类中的方法的CLR对象.我有一个VS2012数据库项目,并添加了对DLL的引用,将IsVisible和ModelAware属性设置为true.我扩展了UserDefinedFunctions类以添加我在DLL中调用静态方法的两个函数.

引用的程序集和我的数据库项目中的CLR对象都设置为SAFE,因为它们除了数据库中的内容之外不需要任何其他内容.

项目构建,但在使用此奇怪错误发布到本地数据库时失败:

Creating [<<REFERENCED_DLL>>]...
Creating [<<CURRENT_DATABASE_CLR>>]...
(288,1): SQL72014: .Net SqlClient Data Provider: 
   Msg 6218, Level 16, State 2, Line 1 
   CREATE ASSEMBLY for assembly '<<CURRENT_DATABASE_CLR>>' failed
   because assembly '<<CURRENT_DATABASE_CLR>>' failed verification. 
   Check if the referenced assemblies are up-to-date and trusted 
   (for external_access or unsafe) to execute in the database.
   CLR Verifier error messages if any will follow this message
[ : UserDefinedFunctions::sf_Function1][mdToken=0x6000001][offset 0x00000005]
   Unable to resolve token.
[ : UserDefinedFunctions::sf_Function2][mdToken=0x6000002][offset 0x00000005] 
   Unable to resolve token.

如果我构建我的<<<<<<<<<" REFERENCED_DLL>>汇编并且不签名,项目发布正常,功能按预期工作.我尝试签署我的数据库项目,并将AllowPartiallyTrustedCallers添加到引用的DLL.

我真的想要只有一个版本的这个DLL,可以在GAC和SQL服务器中使用.我怎样才能做到这一点?

解决方法:

为了安全性和稳定性,SQLCLR只能访问一小部分经批准的GAC组件.所有其他必须在数据库中明确注册.

https://msdn.microsoft.com/en-us/library/ms403279(v=sql.105).aspx

SQL Server CLR仅允许从GAC加载以下内容:

CustomMarshalers
Microsoft.VisualBasic
Microsoft.VisualC
mscorlib
System
System.Configuration
System.Data
System.Data.OracleClient
System.Data.SqlXml
System.Deployment
System.Security
System.Transactions
System.Web.Services
System.Xml 

标签:c,net,visual-studio-2012,sql-server-2008-r2,sqlclr
来源: https://codeday.me/bug/20190703/1367620.html