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

.NET 8升级后AutoMapper启动报错:参数数量不正确

解决.NET 8升级后AutoMapper启动报错问题

问题分析

报错信息Incorrect number of arguments supplied for call to method System.String get_Item(System.String)指向AutoMapper在处理索引器属性(如this[string key]这类带参数的属性)时出现解析错误,同时你的Startup中存在重复的AutoMapper配置方式,两种情况共同导致升级后的启动失败。

解决方案

1. 移除重复的AutoMapper配置

你的Startup中同时使用了两种配置方式,冗余且易引发冲突,保留官方DI扩展的正确用法即可:

public void ConfigureServices(IServiceCollection services)
{
    // 仅保留这一行,自动扫描AutoMapperConfig所在程序集的所有Profile
    services.AddAutoMapper(typeof(AutoMapperConfig));

    // 删除以下手动配置代码
    /*
    var mappingConfig = new MapperConfiguration(mc =>
    {
        mc.AddProfile(new AutoMapperConfig());
    });
    IMapper mapper = mappingConfig.CreateMapper();
    services.AddSingleton(mapper);
    */
}

2. 处理索引器属性映射错误

错误根源是AutoMapper尝试自动映射带参数的索引器属性(如字典的this[string]),无法正确解析参数。在Profile中添加全局忽略规则:

public class AutoMapperConfig : Profile
{
    public AutoMapperConfig()
    {
        // 全局忽略所有带参数的索引器属性
        ForAllMaps((typeMap, mappingExpr) =>
        {
            var indexerMembers = typeMap.DestinationType.GetMembers()
                .Where(m => 
                    m is PropertyInfo prop 
                    && prop.GetGetMethod()?.GetParameters().Length > 0);
            
            foreach (var member in indexerMembers)
            {
                mappingExpr.ForMember(member.Name, opt => opt.Ignore());
            }
        });

        // 保留原有映射配置
        CreateMap<Client, ClientView>()
            .ForMember(target => target.Properties, source => source.Ignore())
            .ForMember(dest => dest.IsActive, opt => opt.MapFrom(src => src.StatusCode == 1))
            .ReverseMap().ForMember(target => target.Properties, source => source.Ignore());
        
        // 其他映射...
    }
}

3. 确保版本匹配

针对.NET 8,使用对应版本的包组合:

  • AutoMapper 13.x
  • AutoMapper.Extensions.Microsoft.DependencyInjection 13.x
    避免跨主版本混用包(如AutoMapper 12搭配Extensions 13)。

4. 排查.NET Framework类库兼容性

由于项目引用了.NET Framework 4.8.1类库,可按以下步骤排查:

  • 暂时移除该类库引用,测试项目是否能正常启动
  • 若启动正常,说明问题出在Framework类库的实体类中,检查是否存在特殊索引器或异常属性定义
  • 逐个恢复类库引用,定位具体引发错误的类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:22:37