我正在开发一个解决方案,该解决方案将与第三方应用程序的SDK进行接口,并最终创建数据集以将数据迁移至我们SQL Server 2014实例上的目标数据库。此接口是通过SQL Server CLR存储过程实现的。在C#方面创建CLR程序集时使用了以下参考资料:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using (3rd party SDK);
using System.Dynamic;
代码可以正确构建。但是,当我尝试使用“CREATE ASSEMBLY”语句创建一个程序集时,出现以下错误:
程序集“MyAssembly”引用程序集“System.Drawing,version=4.0.0.0,culture=neutral,publickeytoken=b03f5f7f11d50a3a。”,该程序集不存在于当前数据库中。SQL Server试图从引用程序集来自的相同位置定位并自动加载所引用的程序集,但该操作失败了(原因:2(系统找不到指定的文件。))。请将所引用的程序集加载到当前数据库中,然后重试您的请求。
进一步说,如果我基于似乎缺少的引用-System.Drawing尝试创建不安全的程序集(请记住,在目标数据库中,我确实将trustworthy设置为true),则会出现以下错误:CREATE ASSEMBLY for assembly 'System.Drawing' failed because assembly 'System.Drawing' 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[: System.Drawing.Image::Finalize][mdToken=0x600000d][offset 0x00000000] Code size is zero.(等等,等等。在system.drawing中的不同方法上重复出现相同的错误)
我已经将解决方案和目标SQL Server数据库匹配到v4.0的.NET框架。我真的很困惑,这看起来比应该的要难得多。我甚至没有直接引用System.Drawing,但出于某种奇怪的原因,我需要它。