You need to enable JavaScript to run this app. SQL Server 2017基于.NET Core DLL创建程序集时出现引用程序集缺失报错
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2017基于.NET Core DLL创建程序集时出现引用程序集缺失报错

问题根因

SQL Server 2017的CLR集成功能原生仅支持基于.NET Framework编译的托管程序集,完全不兼容.NET Core/.NET 5+版本构建的DLL。
你当前遇到的错误只是表象:SQL Server识别到你的DLL引用了.NET Core生态下的核心库system.runtime 4.2.2.0,但由于SQL Server内置的CLR宿主仅加载.NET Framework 4.x运行时,根本没有内置对应版本的Core运行时组件,因此才会提示找不到文件。就算手动把缺失的Core程序集全部加载到数据库中,最终也会因为运行时架构不兼容,无法正常执行CLR逻辑。

可落地的修复步骤
  • 调整项目目标框架,替换原有.NET Core配置
    把csproj中的<TargetFramework>netcoreapp3.1</TargetFramework>修改为SQL Server 2017完全兼容的.NET Framework 4.8版本(对应SQL Server内置CLR v4.0.30319的支持范围,向下兼容4.6.1及以上的.NET Framework版本),保留原有<PlatformTarget>x64</PlatformTarget>的配置,匹配64位SQL Server的进程架构要求。
  • 移除不兼容的NuGet依赖
    原有引用的Microsoft.SqlServer.SqlManagementObjects 161.46041.41是面向.NET Core/.NET Standard构建的版本,不符合CLR集成SAFE权限集的加载要求。这类面向服务器管理的SMO程序集本身也不适合直接部署在CLR环境中,若确需使用相关功能,需匹配对应.NET Framework版本的SMO包,同时把程序集的权限集从SAFE调整为EXTERNAL_ACCESS,更推荐将这类高权限逻辑从CLR程序集中剥离,放到独立的外部应用层执行,避免不必要的安全风险。
  • 补充CLR程序集的必要配置
    SQL Server要求加载的CLR程序集必须经过强名称签名,需要在csproj中增加签名配置,指定项目对应的强名称密钥(.snk)文件,避免加载时触发签名校验失败。
  • 调整数据库端的配置(仅当使用EXTERNAL_ACCESS权限时需要)
    若最终程序集需要访问外部资源,除了调整权限集为EXTERNAL_ACCESS,还需要将目标数据库的TRUSTWORTHY属性设置为ON,或者通过给程序集对应的数字证书创建登录映射的方式,满足权限校验要求。

注意:不要尝试按照错误提示的指引,逐个手动把.NET Core依赖的BCL程序集加载到SQL Server中,这条路完全无法走通,最终会因为运行时不兼容持续报错,且存在极高的安全隐患。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 18:36:08