ASP.NET Core AutoMapper:如何解决错误 CS0121 以下方法或属性之间的调用不明确

问题描述 投票:0回答:2

大约一年前,我使用 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();
c# asp.net-core automapper
2个回答
20
投票

请参阅此网页,其中包含 v13 升级说明。

最重要的是:

AddAutoMapper是核心包的一部分,DI包已停产

因此:

  • 当您升级 AutoMapper 到 v13 时,它现在在基础 Nuget 包中包含
    .AddAutoMapper()
    扩展方法
  • 删除
    AutoMapper.Extensions.Microsoft.DependencyInjection
    包的引用 - 不再需要

0
投票

感谢 marc_s 为我所做的工作!

© www.soinside.com 2019 - 2024. All rights reserved.