You need to enable JavaScript to run this app. .NET 5 EF Core 5执行Scaffold-DbContext报TargetInvocationException错误问询
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5 EF Core 5执行Scaffold-DbContext报TargetInvocationException错误问询

错误原因

这个TypeLoadException报错的根本原因是EF Core运行时加载的程序集版本不匹配,缺失SemanticVersionComparer内部类,常见触发场景如下:

  1. 项目缺少Microsoft.EntityFrameworkCore.Design依赖包,该包是执行脚手架命令的必需依赖,你当前安装的包列表未包含该包
  2. 全局安装的dotnet-ef工具版本和项目中安装的EF Core 5.0.4版本不一致,导致执行命令时加载了版本不匹配的程序集
  3. NuGet本地缓存损坏,导致已安装的Microsoft.EntityFrameworkCore 5.0.4程序集文件缺失相关类
  4. 执行命令时默认使用的启动项目引用了其他版本的EF Core组件,冲突覆盖了目标项目的5.0.4版本程序集
解决方案
  • 补装对应版本的Design包:在目标项目S3.Core.DataSync.Framework中安装5.0.4版本的Microsoft.EntityFrameworkCore.DesignNuGet包
  • 对齐全局dotnet-ef工具版本:
    运行命令查看当前全局工具版本:
    dotnet ef --version
    如果版本不是5.0.4,依次执行以下命令重装对应版本:
    dotnet tool uninstall --global dotnet-ef
    dotnet tool install --global dotnet-ef --version 5.0.4
  • 清理缓存并还原包:关闭Visual Studio,删除解决方案所有项目的bin、obj文件夹,执行以下命令清理全局NuGet缓存后重新还原包:
    dotnet nuget locals all --clear
  • 命令补充启动项目参数:如果S3.Core.DataSync.Framework不是解决方案的启动项目,在你的Scaffold-DbContext命令末尾加上-StartupProject参数,指定和目标项目同.NET 5框架的启动项目,示例如下:
    Scaffold-DbContext "Server=1.1.1.1,1433;Initial Catalog=First;Persist Security Info=False;User ID=data;Password=data;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=True;Connection Timeout=30;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model/DB -Force -Context S3Context -Project S3.Core.DataSync.Framework -StartupProject 你的启动项目名称 -t Data,SyncSales
    
  • 版本验证:如果以上操作仍未解决,可以将所有EF Core相关包统一升级到.NET 5的最终补丁版本5.0.17,再重新执行命令,规避5.0.4版本的已知程序集缺陷。

内容的提问来源于stack exchange,提问作者Micah Armantrout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 23:24:03