Visual Studio 2022 EF Core 6.0.6及以下版本Add-Migration报错
故障原因
你遇到的报错和项目本身的EF Core配置无关,属于Visual Studio 2022的NuGet模块加载Bug:包管理器控制台初始化NuGet PowerShell环境时,脚本在非UI线程调用了COM接口枚举逻辑,导致迁移命令依赖的NuGet服务获取失败返回null,最终触发空引用错误。
从你贴出的.csproj配置看,所有EF Core相关包版本统一为6.0.x分支,Design、Tools包的私有资产配置也符合规范,不需要调整包版本或重装项目依赖。
解决方法(按生效概率从高到低排序)
方法1:重启VS后优先初始化包管理器控制台
- 完全关闭所有Visual Studio窗口,通过任务管理器确认没有残留的
devenv.exe进程后结束所有相关进程 - 重新打开目标项目,不要先打开其他工具窗口、不要加载其他解决方案,也不要先触发其他NuGet相关操作
- 直接通过菜单栏「工具-NuGet包管理器-包管理器控制台」打开PMC窗口
- 等控制台加载完成出现
PM>提示符、无初始化报错后,直接执行Add-Migration InitialSetup即可
这个方案可以解决绝大多数同类型报错,核心是避免其他插件或功能抢占UI线程,保证NuGet模块初始化时能拿到正确的线程上下文。
方法2:使用dotnet ef命令行绕过PMC的Bug
如果包管理器控制台始终报错,可以完全弃用PMC命令,用.NET CLI执行迁移,不会触发NuGet的PowerShell线程问题:
- 打开系统终端或者VS开发者命令提示符,切换到.csproj文件所在的项目根目录
- 首次使用先安装EF全局工具(已经装过可以跳过):
dotnet tool install --global dotnet-ef
- 执行命令创建初始迁移:
dotnet ef migrations add InitialSetup
- 后续需要同步数据库时执行:
dotnet ef database update
命令行生成的迁移文件、执行效果和PMC命令完全一致,没有功能差异。
方法3:修复损坏的VS NuGet组件
如果前两种方法无效,大概率是VS安装时NuGet模块文件损坏:
- 打开Visual Studio Installer,找到对应版本的VS2022,点击「修改」
- 进入「单个组件」标签页,找到「NuGet包管理器」选项,取消勾选后执行修改,等组件卸载完成后重新勾选安装
- 也可以直接点击安装器的「更多-修复」选项,对整个VS安装执行完整修复,修复完成后重启系统再测试。
方法4:排查冲突的第三方扩展
部分第三方VS扩展(代码生成插件、主题插件、第三方版本控制工具等)会挂钩NuGet加载流程,破坏线程上下文:
- 打开VS菜单栏「扩展-管理扩展」,暂时禁用所有非微软官方的第三方扩展
- 重启VS后测试迁移命令,如果可以正常执行,再逐个启用扩展,定位到引发冲突的扩展后更新到最新版本或者直接卸载。
内容的提问来源于stack exchange,提问作者Sammy Hashim
相关产品推荐
相关产品推荐

