【问题标题】:Could not load file or assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies无法加载文件或程序集“System.Drawing,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一
【发布时间】:2020-08-12 14:09:56
【问题描述】:

我有一个调用外部 dll 的 SQL Server 存储过程。存储过程代码如下:

以调用者身份执行 作为 EXTERNAL NAME "一些外部 dll"

我没有这个外部dll的源代码,但是当我执行存储过程时,我得到了上述错误。我安装了 .net framework 3.5 和 4.8,我可以看到引用的 dll 在服务器上,但似乎无法访问?

所有权限都已授予,我还需要检查什么?

【问题讨论】:

    标签: .net sql-server stored-procedures


    【解决方案1】:

    SQL Server CLR 从不从数据库外部加载程序集。您必须运行 CREATE ASSEMBLY 才能将每个依赖程序集安装到数据库中。

    但是,您不应该对 .NET Framework 程序集(如 System.Drawing)执行此操作。任何时候在服务器上更新 .NET Framework 时,您都必须重新加载所有 .NET Framework 程序集。此外,一些 .NET Framework 程序集是“混合模式”,SQL Server 不允许您将它们安装到数据库中,此外,除了“祝福列表”中的少数几个 .NET Framework 程序集之外,没有测试或支持在 SQL CLR 中运行.

    The libraries/namespaces supported by CLR integration in SQL Server are:
    
    CustomMarshalers
    Microsoft.VisualBasic
    Microsoft.VisualC
    mscorlib
    System
    System.Configuration
    System.Core
    System.Data
    System.Data.OracleClient
    System.Data.SqlXml
    System.Deployment
    System.Security
    System.Transactions
    System.Web.Services
    System.Xml
    System.Xml.Linq
    

    Supported .NET Framework Libraries

    无论您在做什么,您都应该在 SQL Server 之外的一个独立进程中进行。这可以是 PowerShell 脚本、由 SQL 代理运行、独立的控制台应用程序等。

    【讨论】:

    • 如何重新加载所有.net框架组件?我正在使用的存储过程是由第 3 方应用程序安装的,它是应用程序的一部分,我看到它在 sql server 数据库的“程序集”中注册了这个 dll,但听起来它在内部为 System.Drawing 提供了参考,而且找不到!这个存储过程应该可以工作了,请问您有什么建议吗?
    • 第三方应该有一个程序让你这样做。
    【解决方案2】:

    好的,问题已经解决,这是由于 Windows 更新影响了 .NET Framework 4.8,我卸载了更新,它现在可以工作了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2017-07-02
      • 2017-05-12
      • 2017-02-14
      • 2017-11-08
      • 2018-03-21
      • 2016-07-19
      相关资源
      最近更新 更多