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

SQL发布报错:未找到system.net.http, version=4.0.0.0程序集

解决SQL CLR发布时System.Net.Http程序集未找到的问题

你遇到的这个报错,核心原因很明确:虽然你的本地项目里引用了System.Net.Http,但SQL Server的CLR运行环境并没有这个程序集的注册记录——SQL Server执行CLR函数时,会从自身的程序集目录(SQL catalog)里查找所有依赖项,本地项目的引用只负责编译,不会自动同步到数据库里。

下面是具体的解决步骤:

  • 第一步:确保SQL Server允许CLR程序集运行
    默认情况下SQL Server可能禁用了CLR功能,先执行以下命令开启:

    sp_configure 'show advanced options', 1;
    RECONFIGURE;
    sp_configure 'clr enabled', 1;
    RECONFIGURE;
    

    如果你用的是SQL Server 2017及以上版本,还需要处理clr strict security的限制(这个设置默认启用,会阻止未签名的程序集运行)。如果暂时只是测试,可以先关闭它:

    sp_configure 'clr strict security', 0;
    RECONFIGURE;
    

    注意:生产环境建议给程序集添加强签名,再通过证书或登录名授权,而不是直接关闭严格安全设置。

  • 第二步:将System.Net.Http部署到SQL Server
    找到对应版本的System.Net.Http.dll文件(通常在C:\Windows\Microsoft.NET\Framework64\v4.0.30319\路径下,根据你的系统位数和.NET版本调整),然后用SQL命令注册到目标数据库:

    CREATE ASSEMBLY [System.Net.Http]
    FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Net.Http.dll'
    WITH PERMISSION_SET = SAFE;
    

    如果该程序集已经存在但版本不匹配,可以用ALTER ASSEMBLY命令更新:

    ALTER ASSEMBLY [System.Net.Http]
    FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Net.Http.dll';
    

    一定要确保你部署的程序集版本是4.0.0.0,公钥令牌是b03f5f7f11d50a3a,和报错信息完全一致。

  • 第三步:调整数据库项目的发布设置
    在你的SSDT数据库项目里,右键项目→属性→找到“SQLCLR”选项,确认“Include all referenced assemblies”(包含所有引用的程序集)选项是勾选状态。这样在生成发布脚本时,会自动包含依赖程序集的创建语句,避免后续发布再出现遗漏。

  • 第四步:验证依赖关系
    部署完成后,可以用以下命令检查数据库里的程序集依赖:

    SELECT 
        a.name AS AssemblyName,
        referenced_assembly_name AS DependentAssembly
    FROM sys.assemblies a
    JOIN sys.assembly_references ar ON a.assembly_id = ar.assembly_id
    WHERE a.name = '你的CLR程序集名称';
    

    确认System.Net.Http已经被列为依赖项,且状态正常。

简单总结一下:本地项目的引用是编译层面的,SQL Server的CLR运行需要实际把依赖程序集部署到数据库中,这两个环节是独立的,你之前只完成了前者,漏掉了后者的部署步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:43:57