.NET Core3.1升.NET8时AutoMapper13.0.0属性缺失的替代方法问询
AutoMapper 13.0.0 替代已移除的 IMapperConfigurationExpression 属性方案
AutoMapper从10.x升级到13.x后,不少原IMapperConfigurationExpression的直接属性被迁移到了子配置节点(比如Validation、Advanced),或者改用方法调用实现。以下是常见场景的替代方案:
1. 验证类配置(如原ValidateInlineMaps)
10.x写法:
cfg.ValidateInlineMaps = true;
13.x替代写法:
cfg.Validation.ValidateInlineMaps = true;
2. 空值相关配置(如原AllowNullDestinationValues)
10.x写法:
cfg.AllowNullDestinationValues = false;
13.x替代写法:
cfg.Advanced.AllowNullDestinationValues = false;
3. 属性映射规则(如原ShouldMapProperty)
如果是自定义哪些属性参与映射,10.x写法:
cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;
13.x直接移到Advanced节点:
cfg.Advanced.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;
4. 自动创建映射(原CreateMissingTypeMaps)
这个属性其实保留了,但如果是依赖注入时的配置,.NET 8里推荐和注册方法结合:
// 直接在配置表达式里设置 cfg.CreateMissingTypeMaps = true; // 或者在DI注册时指定 builder.Services.AddAutoMapper(cfg => cfg.CreateMissingTypeMaps = true, typeof(YourMappingProfile));
5. 其他常见属性替代
- 原
MaxExecutionDepth:改为cfg.Advanced.MaxExecutionDepth = 3; - 原
PreserveReferences:可以用方法调用cfg.PreserveReferences();,或者设置cfg.Advanced.PreserveReferences = true;
如果报错里提到的是特定属性,你可以对照AutoMapper的版本变更日志找对应项,但以上是升级中最常遇到的场景。另外注意,.NET 8中注册AutoMapper推荐用AddAutoMapper传入映射Profile所在的程序集,避免旧注册方式的兼容问题。
内容的提问来源于stack exchange,提问作者Yusuf Dokunlu
相关产品推荐
相关产品推荐

