咨询dotnet ef migrations add与Add-Migration的差异及报错原因
两者执行结果不同,核心是运行环境和依赖解析逻辑的差异,具体可以拆成这几点:
.NET SDK版本匹配问题
dotnet ef命令依赖全局安装的.NET SDK版本,而VS包管理器控制台(PMC)默认使用VS集成的SDK或项目文件中指定的SDK版本。如果全局SDK版本和项目目标框架版本不匹配(比如项目用.NET 6,但全局SDK是.NET 7),就会出现程序集版本不兼容的错误,而PMC因为和项目版本对齐,能正常加载依赖。工具版本不一致
dotnet ef是全局安装的CLI工具,其版本可能和项目中引用的Microsoft.EntityFrameworkCore.ToolsNuGet包版本不匹配。比如全局ef工具是7.0.x,但项目用的是6.0.x的EF Core工具,版本错位会导致加载错误的System.Runtime程序集。而PMC直接使用项目本地安装的Tools版本,版本一致就不会有问题。依赖解析上下文差异
PMC运行在VS的进程环境中,会自动读取项目的完整配置,包括app.config或web.config中的程序集绑定重定向规则,以及项目的NuGet依赖缓存。而dotnet ef在命令行环境下,可能没有正确加载这些绑定重定向,或者依赖缓存存在冲突,导致无法找到匹配版本的System.Runtime。环境变量与加载路径不同
VS启动时会设置一系列特定的环境变量,调整.NET程序集的加载路径;而命令行环境使用系统默认的环境变量,程序集搜索路径可能和VS环境不一致,导致加载了错误版本的System.Runtime。
内容的提问来源于stack exchange,提问作者unie

