.NET 5 Web API调用AddAutoMapper报CS0121错误的版本差异原因是什么?
问题原因
这个错误并非.NET Core 2.2与.NET 5的运行时框架差异直接导致,而是你项目引用的AutoMapper.Extensions.Microsoft.DependencyInjection包版本升级带来的API变更:
- 适配.NET Core 2.2的旧版扩展包存在无参的
AddAutoMapper()重载,默认会自动扫描所有程序集查找AutoMapper的Profile配置,不会出现调用歧义 - 适配.NET 5的新版扩展包移除了无参重载,仅保留两个参数签名:
AddAutoMapper(IServiceCollection, params Assembly[])AddAutoMapper(IServiceCollection, params Type[])
你调用时没有传任何参数,两个带params关键字的重载都符合匹配规则,编译器无法判断该调用哪个方法,就会抛出CS0121错误。
修复方案
你只需要明确指定要扫描Profile的程序集/类型即可,以下是两种常用写法:
- 扫描当前启动项目的程序集(如果你的Profile都定义在Web项目里)
services.AddAutoMapper(typeof(Startup).Assembly);
- 直接传入自定义Profile的类型(如果你的Profile定义在单独的类库项目里)
假设你定义了名为CustomMappingProfile的Profile类,写法如下:
services.AddAutoMapper(typeof(CustomMappingProfile));
如果有多个分散在不同程序集的Profile,也可以传入多个程序集/类型参数:
// 扫描多个程序集 services.AddAutoMapper(typeof(Startup).Assembly, typeof(CustomMappingProfile).Assembly);
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

