You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署VB.NET编写的SQL CLR程序集时提示system.directoryservices.accountmanagement未在SQL目录找到

解决方案

核心原因

SQL Server的CLR运行环境维护独立的程序集目录,不会自动读取系统全局程序集缓存(GAC)中的非默认内置程序集。System.DirectoryServices、System.DirectoryServices.AccountManagement 不属于SQL CLR默认预置的可信程序集列表,因此仅在项目本地添加引用只能保证编译通过,不会自动同步到SQL实例的程序集目录中,部署阶段就会触发找不到程序集的报错。

操作步骤

  • 开启SQL Server CLR集成功能
    用具备管理员权限的账户在目标数据库执行以下SQL语句:
    sp_configure 'show advanced options', 1;
    RECONFIGURE;
    sp_configure 'clr enabled', 1;
    RECONFIGURE;
    
  • 配置数据库权限属性
    测试环境可以直接开启数据库TRUSTWORTHY属性:
    ALTER DATABASE [你的目标数据库名称] SET TRUSTWORTHY ON;
    
    生产环境建议使用非对称密钥签名的方式授权,避免放开全局TRUSTWORTHY权限带来的安全风险。
  • 按依赖顺序注册两个关联程序集到目标数据库
    首先从Visual Studio的引用属性页复制两个dll对应的完整本地路径,确认dll版本和架构(x86/x64)与项目引用、SQL Server实例架构完全匹配,再执行SQL注册:
    -- 先注册基础依赖
    CREATE ASSEMBLY [System.DirectoryServices]
    FROM 'C:\xxx\System.DirectoryServices.dll' -- 替换为你实际的dll路径
    WITH PERMISSION_SET = EXTERNAL_ACCESS;
    
    -- 再注册AccountManagement程序集
    CREATE ASSEMBLY [System.DirectoryServices.AccountManagement]
    FROM 'C:\xxx\System.DirectoryServices.AccountManagement.dll' -- 替换为你实际的dll路径
    WITH PERMISSION_SET = EXTERNAL_ACCESS;
    
  • 调整Visual Studio项目配置
    打开CLR项目属性页:
    1. 切换到部署相关标签,将CLR权限级别设置为 EXTERNAL_ACCESS
    2. 找到两个System前缀的引用项,将其属性中的「生成操作」改为「不生成」,避免VS重复部署已经手动注册的程序集
  • 重新触发项目部署即可正常完成

注意事项

  • 注册用的dll版本必须和项目引用的版本完全一致,避免出现版本不兼容的报错
  • SQL Server 2022及以上版本默认禁用了部分非标准CLR程序集的注册,如有需要可额外关闭CLR严格安全配置验证

内容的提问来源于stack exchange,提问作者S3minaki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:27:03