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

.NET使用Hangfire.PostgreSql报NpgsqlTypeMapping类型加载异常

问题根因

Could not load type 'Npgsql.TypeMapping.NpgsqlTypeMapping' 是典型的Npgsql版本依赖冲突问题。
Hangfire.PostgreSql包会绑定特定大版本的Npgsql依赖,安装该包时如果项目原有Npgsql(包括EF Core等组件依赖的Npgsql)和它要求的版本大版本不一致,就会出现类型加载失败,直接影响所有PostgreSQL访问逻辑——这也和「装包就坏、删包就好」的现象完全吻合,和连接字符串配置、Docker环境本身没有直接关系。

修复步骤
  • 先卸载项目中所有相关包:Hangfire.PostgreSql、Npgsql、Npgsql.EntityFrameworkCore.PostgreSQL(EF Core场景下),同时删除obj、bin目录下的旧编译缓存
  • 根据你的.NET版本选定兼容的Npgsql大版本:
    • .NET 6/7 选择Npgsql 6.x/7.x版本
    • .NET 8 选择Npgsql 8.x版本
  • 安装和Npgsql大版本严格匹配的Hangfire.PostgreSql包:
    • Npgsql 6.x 对应安装1.9.x系列的Hangfire.PostgreSql
    • Npgsql 7.x 对应安装2.0.x系列的Hangfire.PostgreSql
    • Npgsql 8.x 对应安装2.1.x及以上版本的Hangfire.PostgreSql
  • 安装包时不要手动指定版本强制覆盖依赖,让Nuget自动完成版本解析,避免出现dll版本绑定不一致的问题
  • Docker部署场景下重新构建镜像时加--no-cache参数,避免构建缓存里残留旧版本的程序集文件
配置校验
  • 注册Hangfire服务时使用标准的PostgreSql存储配置写法,不要调用过时的重载方法:
// Program.cs/Startup.cs 中注册服务
services.AddHangfire(config =>
{
    config.UsePostgreSqlStorage(Configuration.GetConnectionString("你的数据库连接字符串名"));
});
// 中间件注册
app.UseHangfireDashboard();
app.UseHangfireServer();
  • 暂时移除项目里自定义的Npgsql类型映射配置,先跑通基础任务调度逻辑后再逐步加回自定义配置
  • 数据库连接字符串暂时去掉兼容性相关的特殊参数,用最小配置验证功能正常后再按需调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:15:27