C# 在SQL Server 2008R2中引用已签名程序集
我有一个C#.NET 3.5类库(DLL),在某些SSIS脚本任务中使用,因此必须将其加载到GAC,这意味着必须对其进行签名。我创建了一个密钥并签署了DLL,它在SSIS中工作 现在我还想将此DLL加载到SQL server,并创建了一些引用此DLL中类中方法的CLR对象。我有一个VS2012数据库项目,并添加了对DLL的引用,将IsVisible和ModelAware属性设置为true。我扩展了UserDefinedFunctions类,添加了两个调用DLL中静态方法的函数 我的数据库项目中引用的程序集和CLR对象都设置为C# 在SQL Server 2008R2中引用已签名程序集,c#,.net,visual-studio-2012,sql-server-2008-r2,sqlclr,C#,.net,Visual Studio 2012,Sql Server 2008 R2,Sqlclr,我有一个C#.NET 3.5类库(DLL),在某些SSIS脚本任务中使用,因此必须将其加载到GAC,这意味着必须对其进行签名。我创建了一个密钥并签署了DLL,它在SSIS中工作 现在我还想将此DLL加载到SQL server,并创建了一些引用此DLL中类中方法的CLR对象。我有一个VS2012数据库项目,并添加了对DLL的引用,将IsVisible和ModelAware属性设置为true。我扩展了UserDefinedFunctions类,添加了两个调用DLL中静态方法的函数 我的数据库项目中引
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.
创建[]。。。
正在创建[]。。。
(288,1):SQL72014:.Net SqlClient数据提供程序:
Msg 6218,16级,状态2,第1行
为程序集“”创建程序集失败
因为程序集“”验证失败。
检查引用的程序集是否为最新且受信任的程序集
(用于外部访问或不安全)在数据库中执行。
CLR验证程序错误消息(如果有)将跟随此消息
[:UserDefinedFunctions::sf_Function1][mdToken=0x6000001][offset 0x00000005]
无法解析令牌。
[:UserDefinedFunctions::sf_Function2][mdToken=0x6000002][offset 0x00000005]
无法解析令牌。
疯狂的是,如果我构建了
程序集,但没有对其进行签名,那么项目就可以正常发布,函数也可以按预期工作。我尝试对数据库项目进行签名,并将AllowPartiallyTrustedCallers
添加到引用的DLL中
我真的希望这个DLL有一个版本,既可以在GAC中使用,也可以在SQL server中使用。如何才能做到这一点?为了安全性和稳定性,SQLCLR只能访问一小部分经批准的GAC程序集。所有其他文件必须在数据库中显式注册 看 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
您是否已向数据库注册了强密钥
CREATE ASSEMBLY yourSQLCLR
FROM 'C:\\yourSignedSQLCLR.dll'
WITH PERMISSION_SET = UNSAFE | SAFE | EXTERNAL_ACCESS
非常感谢,尽管问题来自2013:-)我必须测试一下,以确定是否有办法向DB显式注册已签名程序集。。。要明确的是,我没有尝试加载GAC程序集-我正在尝试使用“创建程序集”将签名程序集加载到SQL Server中。@NWest-我没有注意到原始日期。我也不完全理解这个问题!我添加了一个本地的答案。我希望这会有帮助。