AutoMapper报错:MapperConfiguration不存在接受1个参数的构造函数
AutoMapper报错:MapperConfiguration不存在接受1个参数的构造函数
这个报错的核心原因是你的代码写法和当前安装的AutoMapper版本不匹配,AutoMapper在不同版本中调整了配置API的设计,咱们一步步来解决:
一、问题根源拆解
你遇到的
CS1729错误,大概率是因为安装了AutoMapper 9.0以上的新版本,但代码沿用了旧版的配置逻辑;或者反过来装了旧版包却用了新版语法(前者出现的频率更高)。
二、两种可选解决方案
方案1:调整代码适配新版AutoMapper(推荐)
从AutoMapper 9.0开始,部分配置属性已经改为扩展方法调用,同时要确保你正确引用了AutoMapper命名空间。调整后的代码如下:
// 记得在文件顶部添加命名空间引用 using AutoMapper; var config = new MapperConfiguration(cfg => { // 新版中这些配置项是扩展方法,需要用调用的方式 cfg.AllowNullDestinationValues(true); cfg.AllowNullCollections(true); cfg.AddProfile(new AutomapperProfiles()); });
如果是AutoMapper 12+的最新版本,也可以用更清晰的链式写法:
var config = new MapperConfigurationBuilder() .AllowNullDestinationValues(true) .AllowNullCollections(true) .AddProfile(new AutomapperProfiles()) .CreateMapperConfiguration();
方案2:降级AutoMapper版本匹配原有代码
如果你不想修改现有代码,可以卸载当前版本的AutoMapper,安装8.0.x系列的旧版本(这是最后一个完全支持旧版属性赋值写法的大版本):
- 打开NuGet包管理器,找到已安装的AutoMapper,点击卸载
- 搜索AutoMapper,筛选版本为8.0.x(比如8.0.1)进行安装
- 安装完成后,你的原有代码就能正常编译运行
三、额外注意点
- 确保项目只引用了官方的AutoMapper核心包,不要只装扩展包(比如
AutoMapper.Extensions.Microsoft.DependencyInjection)却遗漏了核心的AutoMapper包 - 如果你在ASP.NET Core等依赖注入环境中使用,推荐直接用
AutoMapper.Extensions.Microsoft.DependencyInjection,通过services.AddAutoMapper(assembly => assembly.GetType<AutomapperProfiles>())这种方式配置,能彻底避开手动实例化的版本适配问题
内容来源于stack exchange
相关产品推荐
相关产品推荐

