【问题标题】:Could not load file or assembly … or one of its dependencies. Exception from HRESULT: 0x80FC3C2C无法加载文件或程序集……或其依赖项之一。 HRESULT 异常:0x80FC3C2C
【发布时间】:2011-07-22 06:50:14
【问题描述】:

异常消息:无法加载文件或程序集 System.DirectoryServices 或其依赖项之一。 HRESULT 异常:0x80FC3C2C

CLR SQL 过程引发的异常。程序集中的方法引发异常,其中 System.DirectoryServices 中的一个类已初始化,并且该程序集由带有 CLR 过程的程序集使用。

环境:

  1. MS SQL Server 2005 标准版
  2. .NET 框架 2.0
  3. 创建程序集的数据库的参数 TRUSTWORTHY 设置为 ON
  4. 使用 PERMISSION_SET = UNSAFE 创建的程序集

【问题讨论】:

  • 您需要使用Fusion log viewer. 进行调试,只需确保以管理员身份运行它,打开日志,然后在尝试调试之前重新启动。您将看到 CLR 在哪里寻找程序集,以及什么版本,并从那里确定为什么找不到它(如果您甚至安装了它)。
  • Fusion 日志查看器在 MS SQL 服务器上调试时不起作用。
  • @NetRat:我觉得这很难相信。您是否以管理员身份运行 fuslogvw?开启日志后重启了吗?日志是否包含 nothing(打开时它总是有东西)?
  • @Will:我没有重启。嗯,再试一次。
  • @NetRat:必须以管理员身份运行(右键单击,以管理员身份运行)提升,然后在打开后重新启动。除非你这样做,否则它不会起作用。

标签: .net sql-server clr sqlclr


【解决方案1】:

请记住,这个答案来自我在培训课上的笔记……您必须将 PERMISSION_SET 设置为 EXTERNAL_ACCESS 才能访问服务器的文件系统或访问另一台服务器。这是有道理的,因为您正在使用 System.DirectoryServices 访问另一台服务器(域控制器)。

【讨论】:

  • PERMISSION_SET = UNSAFE 实际上允许比 EXTERNAL_ACCESS 更多的访问权限。
【解决方案2】:

我认为 SQL Server 内部根本不支持 System.DirectoryServices 程序集。 SQL Server 只允许使用非常特定(硬编码)的程序集列表(SQL Server 2005SQL Server 2008),以免危及它的稳定性。

话虽如此,似乎还是有办法实现它,请参阅question/answer(还没有尝试过)。

【讨论】:

    【解决方案3】:

    最后,我找到了解决方法。我将 System.DirectoryServices 的引用添加到链接到 MS SQL 的程序集中,并在 CLR 过程代码中从此命名空间创建一个类。因此 System.DirectoryServices 程序集从放置 DS 的主要代码的类中变得可见。

    【讨论】:

      【解决方案4】:

      在我的情况下,问题与数据库的所有者有关。

      当您遇到此错误时,它也经常发生。 还原数据库后,它可能有助于修复主数据库中的数据库所有者:

      --Update db owner in master database
      DECLARE @Command VARCHAR(MAX) = 'ALTER AUTHORIZATION ON DATABASE::[<<DatabaseName>>] TO 
      [<<LoginName>>]' 
      
      SELECT @Command = REPLACE(REPLACE(@Command 
                  , '<<DatabaseName>>', SD.Name)
                  , '<<LoginName>>', SL.Name)
      FROM master..sysdatabases SD 
      JOIN master..syslogins SL ON  SD.SID = SL.SID
      WHERE  SD.Name = DB_NAME()
      
      PRINT @Command
      EXEC(@Command)
      

      如果这没有帮助,请尝试以下方法:

      ALTER AUTHORIZATION ON DATABASE::[YourDatabaseName] TO [sa]
      

      【讨论】:

        猜你喜欢
        • 2014-10-08
        • 2021-12-12
        • 2012-01-14
        • 1970-01-01
        相关资源
        最近更新 更多