.NET 5 EF Core 5执行Scaffold-DbContext报TargetInvocationException错误问询
错误原因
这个TypeLoadException报错的根本原因是EF Core运行时加载的程序集版本不匹配,缺失SemanticVersionComparer内部类,常见触发场景如下:
- 项目缺少
Microsoft.EntityFrameworkCore.Design依赖包,该包是执行脚手架命令的必需依赖,你当前安装的包列表未包含该包 - 全局安装的
dotnet-ef工具版本和项目中安装的EF Core 5.0.4版本不一致,导致执行命令时加载了版本不匹配的程序集 - NuGet本地缓存损坏,导致已安装的Microsoft.EntityFrameworkCore 5.0.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-efdotnet 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
相关产品推荐
相关产品推荐

