大约一年前,我使用AutoMapper开发了一个ASP.NET Core 6 Web API.它当时是有效的,但突然我收到了这个错误:

Error CS0121
The call is ambiguous between the following methods or properties: 'Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.AddAutoMapper(Microsoft.Extensions.DependencyInjection.IServiceCollection, params System.Type[])' and 'Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.AddAutoMapper(Microsoft.Extensions.DependencyInjection.IServiceCollection, params 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升级说明的这款web page.

最重要的是:

AddAutoMapper是核心包的一部分,而DI package is discontinued

因此:

  • 当您将AutoMapper upgrade转换为V13时,它现在在基本Nuget包中包含了.AddAutoMapper()扩展方法
  • RemoveAutoMapper.Extensions.Microsoft.DependencyInjection套餐的引用-不再需要

Csharp相关问答推荐

Microsoft.AspNetCore.Mvc. Controller Base.用户:属性或索引器Controller Base.用户无法分配给--它是只读的

读取配置文件(mytest. exe. config)

为什么C#Bigbit不总是相同的比特长度?

Azure Function应用(. NET 8)不将信息记录到应用洞察

与C#中的Zip列表并行

如何从ASP.NET核心MVC视图和Blazor传递数据

如何使用C#中的主构造函数功能使用多个构造函数?

Azure函数中实体框架核心的依赖注入

在.NET MAUI.NET 8中如何防止按钮点击时出现灰色反馈

ASP.NET核心MVC SqlException:违反主键约束';PK_USER';.无法在对象';数据库中插入重复的密钥.用户';

如何在C#中创建VS代码中的控制台应用程序时自动生成Main方法

.NET并发词典交换值

自定义列表按字符串的部分排序

有没有更好的方法来在CosmosDB上插入非id?

BFF到具有AAD/Entra ID B2C的内部API(.NET/ASP.NET核心/标识.Web)

如何允许数组接受多个类型?

升级后发出SWITCH语句

岛屿和框架中的自定义控件库.Navigate-AccessViolationException

如何使用.NET Aspire从Blazor应用程序与GRPC API通信?

组件';EditForm';使用与包含子内容元素';授权';相同的参数名称(';上下文';)