【问题标题】:Error with adding dll in SQL Server 2014. Problem's with CLR在 SQL Server 2014 中添加 dll 时出错。CLR 有问题
【发布时间】:2019-03-19 17:52:20
【问题描述】:

我在 SQL Server 2014 中添加程序集 dll 时遇到问题。我尝试创建这样的程序集存储过程

CREATE ASSEMBLY pdf_create FROM 'dll path\test.dll' WITH PERMISSION_SET = SAFE

SQL Server 返回此错误:

程序集 'test' 引用程序集 'system.drawing, version=2.0.0.0,culture=neutral, publickeytoken=b03f5f7f11d50a3a.',当前数据库中不存在。 SQL Server 尝试从引用程序集所在的同一位置定位并自动加载被引用程序集,但该操作失败(原因:2(Не удается найти указаный файл.))。请将引用的程序集加载到当前数据库中,然后重试您的请求。

如果你有任何想法请帮忙

【问题讨论】:

  • test.dll 取决于 system.drawing。您需要在添加test.dll之前将system.drawing添加到SQL Server。
  • 为什么首先要依赖 System.Drawing?即使您设法加载它,它也很容易泄漏 GDI+ 对象。该 dll 旨在在 Windows 窗体应用程序上绘制图像,而不是用于服务器端图像处理。 It was never meant for multi-threaded applications。 Web 项目使用 ImageSharp 代替
  • @PanagiotisKanavos 有时别无选择。例如。我们必须导入System.Drawing,因为ZXing库的.NET端口依赖于它,我们使用它在服务器端生成条形码,我们必须在服务器端这样做,因为Crystal Reports要么忽略图像字段不是来自数据库,或者在尝试显示时崩溃(由于其他原因,我们被某个不是很新的 Crystal Reports 版本卡住了)。
  • @GSerg 网站有同样的问题,他们使用 System.Drawing。此外,您不需要 ZXing 或 System.Drawing 来生成条形码,至少是常见的 EAN13。您可以使用条形码字体将数字显示为条形码

标签: sql-server sql-server-2014 sqlclr


【解决方案1】:

所以问题是为什么您需要在 SQLCLR 程序集中依赖 system.drawing.dll?我会查看test.dll 的代码,并尝试摆脱这种特定的依赖关系。

如果您绝对需要包含system.drawing.dll,您可以做的是复制它并将其放在与您尝试从中创建程序集的 dll 相同的目录中,因为 SQL Server 会自动从依赖程序集创建程序集,如果它们在同一条路径上。

但是,如果您这样做,那么您可能需要更改您创建的程序集的权限集,因为(如果我没记错的话)system.drawing.dll 需要比SAFE 更少的权限集。

所以总而言之,试着摆脱依赖,这样你就省去了很多麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多