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パッケージマネージャーで以下を実行:
AutoMapper.Extensions.Microsoft.DependencyInjection
をアンインストール- プロジェクトファイル(.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以降すべてのバージョンで動作
注意事項
- 他パッケージとのバージョン競合を防ぐため、関連パッケージも更新推奨bash
Update-Package Microsoft.EntityFrameworkCore -Version 6.0.25 Update-Package Serilog.AspNetCore -Version 8.0.0
- 一時的な解決策としてのダウングレード(例: v12.0.0)は非推奨 → 将来的に同様の問題が再発する可能性
バージョン互換性マトリックス
コンポーネント | 推奨バージョン | 非推奨バージョン |
---|---|---|
AutoMapper本体 | v13.x+ | v12.x以下 |
DIパッケージ | 不要 | 全バージョン |
.NET SDK | 6.0+ | - |
参考情報
この解決策により、メソッドの曖昧さを示すCS0121エラーは完全に解消され、最新のAutoMapper機能を安全に利用できるようになります。