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

ASP.NET Core 6中AutoMapper的CS0121歧义调用错误求助

问题:AutoMapper依赖注入方法调用不明确错误

一年前开发的ASP.NET Core 6 Web API,之前运行正常,突然出现以下编译错误:

Error CS0121
调用在以下方法或属性之间不明确:'Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.AddAutoMapper(Microsoft.Extensions.DependencyInjection.IServiceCollection, params System.Type[])' 和 'Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.AddAutoMapper(Microsoft.Extensions.DependencyInjection.IServiceCollection, params System.Type[])'

发现当前使用的AutoMapper.Extensions.Microsoft.DependencyInjection 12.0.1版本已被弃用,且无更高版本,于是降级至12.0.0版本,但代码services.AddAutoMapper(typeof(AuthMapperProfile));中的.AddAutoMapper仍被标红。

项目文件内容

<Project Sdk="Microsoft.NET.Sdk.Web">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <Nullable>disable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" />
        <PackageReference Include="FluentValidation.AspNetCore" Version="11.1.2" />
        <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.4" />
        <PackageReference Include="Microsoft.AspNetCore.Http"  Version="2.2.2" />
        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.4" />
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" />
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="5.0.0" />
        <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.1.1" />
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.4" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.4" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.4">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageReference>
        <PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
        <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />
        <PackageReference Include="NETCore.MailKit" Version="2.0.3" />
        <PackageReference Include="Serilog.AspNetCore" Version="5.0.0" />
        <PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />
        <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
        <PackageReference Include="Serilog.Sinks.RavenDB" Version="3.0.0" />
        <PackageReference Include="ServiceStack.Interfaces" Version="6.0.2" />
        <PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.1" />
        <PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" />
        <PackageReference Include="System.ServiceModel.Duplex" Version="4.8.*" />
        <PackageReference Include="System.ServiceModel.Federation" Version="4.8.*" />
        <PackageReference Include="System.ServiceModel.Http" Version="4.8.*" />
        <PackageReference Include="System.ServiceModel.NetTcp" Version="4.8.*" />
        <PackageReference Include="System.ServiceModel.Security" Version="4.8.*" />
    </ItemGroup>
</Project>

相关代码片段

AuthMapperProfile.cs

public class AuthMapperProfile : Profile
{
    public AuthMapperProfile()
    {
        CreateMap<ApplicationUser, UserDto>().ReverseMap();
        CreateMap<ApplicationUser, ForgotPasswordDto>().ReverseMap();
        CreateMap<ApplicationUser, ResetPasswordDto>().ReverseMap();
        CreateMap<ApplicationUser, UpdatePasswordDto>().ReverseMap();
        CreateMap<ApplicationUser, MustChangePasswordDto>().ReverseMap();
        CreateMap<ApplicationUser, PasswordChangeDto>().ReverseMap();
    }
}

AutoMapperServiceExtension.cs

public static class AutoMapperServiceExtension
{
    public static void ConfigureAutoMappers(this IServiceCollection services)
    {
        services.AddAutoMapper(typeof(AuthMapperProfile));
    }
}

Program.cs 相关代码

// Configure AutoMapper
builder.Services.ConfigureAutoMappers();
解决方案

这个错误源于项目中存在重复的AddAutoMapper扩展方法定义,可能是直接安装了多个冲突版本的AutoMapper包,或第三方依赖间接引入了重复定义,导致编译器无法区分。可按以下步骤解决:

  • 清理重复依赖与编译缓存
    打开NuGet包管理器,检查是否存在除AutoMapper和AutoMapper.Extensions.Microsoft.DependencyInjection之外的其他AutoMapper相关包;执行dotnet clean命令清理项目的bin/obj目录后重新生成。

  • 显式指定扩展方法命名空间
    在调用AddAutoMapper时,直接指定命名空间消除歧义:

    public static void ConfigureAutoMappers(this IServiceCollection services)
    {
        AutoMapper.Extensions.Microsoft.DependencyInjection.ServiceCollectionExtensions.AddAutoMapper(services, typeof(AuthMapperProfile));
    }
    
  • 排查间接依赖冲突
    使用dotnet list package --include-transitive命令查看所有依赖项,找到重复引入的AutoMapper相关包,通过PackageReference的ExcludeAssets属性排除重复依赖,或调整冲突第三方包的版本。

  • 重新安装AutoMapper扩展包
    完全卸载现有包后重新安装指定版本:

    dotnet remove package AutoMapper.Extensions.Microsoft.DependencyInjection
    dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection --version 12.0.0
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:04:58