大约一年前,我使用 AutoMapper 开发了 ASP.NET Core 6 Web API。当时它可以工作,但突然我得到了这个错误:
错误CS0121
以下方法或属性之间的调用不明确:“Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.AddAutoMapper(Microsoft.Extensions.DependencyInjection.IServiceCollection, params System.Type[])”和“Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.AddAutoMapper( Microsoft.Extensions.DependencyInjection.IServiceCollection,参数 System.Type[])'
我还发现:
AutoMapper.Extensions.Microsoft.DependencyInjection Version-12.0.1
使用的已弃用,因为没有更高版本,所以我降级为:
AutoMapper.Extensions.Microsoft.DependencyInjection Version-12.0.0
然后:
.AddAutoMapper
突出显示于:
services.AddAutoMapper(typeof(AuthMapperProfile));
请帮忙解决。
项目文件:
<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>
AuthMapperProfile
:
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
:
public static class AutoMapperServiceExtension
{
public static void ConfigureAutoMappers(this IServiceCollection services)
{
services.AddAutoMapper(typeof(AuthMapperProfile));
}
}
Program.cs
:
// Configure AutoMapper
builder.Services.ConfigureAutoMappers();
请参阅此网页,其中包含 v13 升级说明。
最重要的是:
AddAutoMapper是核心包的一部分,DI包已停产
因此:
.AddAutoMapper()
扩展方法AutoMapper.Extensions.Microsoft.DependencyInjection
包的引用 - 不再需要感谢 marc_s 为我所做的工作!