ASP.NET Core 6中AutoMapper的CS0121歧义调用错误求助
一年前开发的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

