Skip to content

AutoMapper 曖昧なメソッド呼び出しエラーCS0121の解決

問題の説明

ASP.NET Core 6プロジェクトでAutoMapperを使用中、突然以下のエラーが発生するケースがあります:

Error CS0121
The call is ambiguous between the following methods or properties:
'Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.AddAutoMapper(...)' と
'Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.AddAutoMapper(...)'

このエラーは、主に次の状況で発生します:

  • AutoMapper.Extensions.Microsoft.DependencyInjection パッケージを使用している
  • AutoMapperバージョンが11~12系からアップグレードされた
  • サービスの登録でAddAutoMapperメソッドを呼び出している

エラーの根本原因

根本的な原因は、AutoMapper.Extensions.Microsoft.DependencyInjectionパッケージが廃止(Discontinued) されたことにより、メソッド定義が競合するためです。AutoMapper v13以降、依存性注入機能はコアパッケージへ統合され、専用DIパッケージは不要になりました。

完全解決手順

🛠️ ステップ1: 古いDIパッケージの削除

NuGetパッケージマネージャーで以下を実行:

  1. AutoMapper.Extensions.Microsoft.DependencyInjection をアンインストール
  2. プロジェクトファイル(.csproj)から該当PackageReferenceを削除
xml
<!-- 削除する行 -->
<!--<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" />-->

⬆️ ステップ2: AutoMapper本体のアップグレード

NuGetでAutoMapperパッケージをv13以上に更新:

bash
Update-Package AutoMapper -Version 13.0.0

🔧 ステップ3: サービス登録方法の変更

Program.cs内のサービス登録を新しい形式に修正:

csharp
// 修正前(非推奨)
builder.Services.ConfigureAutoMappers();

// 修正後(新しい書式)
builder.Services.AddAutoMapper(typeof(Program));

アセンブリ指定のベストプラクティス

typeof(Program)部分は、マッピングプロファイルを含む任意のアセンブリ内の型を指定できます。一般的には:

  • typeof(Program) または Assembly.GetExecutingAssembly() 推奨
  • 特定プロファイルのみ指定したい場合は typeof(AuthMapperProfile) も可能

修正後の完全コード例

csharp
public class AuthMapperProfile : Profile
{
    public AuthMapperProfile()
    {
        CreateMap<ApplicationUser, UserDto>().ReverseMap();
        CreateMap<ApplicationUser, ForgotPasswordDto>().ReverseMap();
        // 他のマッピング設定...
    }
}
csharp
var builder = WebApplication.CreateBuilder(args);

// 他のサービス設定...

// AutoMapper設定(DIパッケージ不要)
builder.Services.AddAutoMapper(typeof(Program));

var app = builder.Build();
// アプリケーション起動コード...

🔍 なぜこの解決策か?

  • 廃止パッケージの削除:衝突しているメソッド定義を完全排除
  • 最新パッケージ対応:AutoMapper v13+は組み込みDIサポートを提供
  • 前方互換性:この方法は.NET 6以降すべてのバージョンで動作

注意事項

  1. 他パッケージとのバージョン競合を防ぐため、関連パッケージも更新推奨
    bash
    Update-Package Microsoft.EntityFrameworkCore -Version 6.0.25
    Update-Package Serilog.AspNetCore -Version 8.0.0
  2. 一時的な解決策としてのダウングレード(例: v12.0.0)は非推奨 → 将来的に同様の問題が再発する可能性

バージョン互換性マトリックス

コンポーネント推奨バージョン非推奨バージョン
AutoMapper本体v13.x+v12.x以下
DIパッケージ不要全バージョン
.NET SDK6.0+-

参考情報

この解決策により、メソッドの曖昧さを示すCS0121エラーは完全に解消され、最新のAutoMapper機能を安全に利用できるようになります。