.NET Core迁移突然失效:MSB1008错误排查求助
MSB1008: Only one project can be specified错误 问题背景
项目此前多次执行EF迁移命令均正常,使用的命令为:
dotnet ef migrations add "TestMigration" --project src/Infrastructure --startup-project src/WebUI --output-dir Persistence/Migrations
今日执行该命令时突然触发错误,切换命令执行目录、调整参数、回退至历史正常分支均无法解决,完整错误日志如下:
MSBUILD : error MSB1008: Only one project can be specified.
Full command line: 'C:\Program Files\dotnet\sdk\6.0.321\MSBuild.dll -maxcpucount -verbosity:m -restore -consoleloggerparameters:Summary ef migrations add Initial --project src/Infrastructure --startup-project src/WebUI --output-dir Persistence/Migrations -distributedlogger:Microsoft.DotNet.Tools.MSBuild.MSBuildLogger,C:\Program Files\dotnet\sdk\6.0.321\dotnet.dll*Microsoft.DotNet.Tools.MSBuild.MSBuildForwardingLogger,C:\Program Files\dotnet\sdk\6.0.321\dotnet.dll'
Switches appended by response files:
Switch: migrations
可行解决方案
对齐EF Core工具与SDK版本
当前使用的.NET SDK为6.0.321,确保全局安装的EF Core工具版本与SDK版本匹配:# 查看已安装的EF工具版本 dotnet tool list --global # 更新至对应.NET 6.x版本的EF工具 dotnet tool update --global dotnet-ef --version 6.0.25清理MSBuild缓存与项目编译文件
错误日志显示响应文件错误追加了migrations开关,可通过清理缓存修复:- 删除项目根目录下的
.vs、bin、obj文件夹 - 删除
C:\Users\{你的用户名}\AppData\Local\Microsoft\MSBuild目录下对应6.0.321版本的缓存文件夹
- 删除项目根目录下的
显式指定项目文件路径
避免路径解析歧义,直接传入项目的.csproj文件完整路径:dotnet ef migrations add "TestMigration" --project src/Infrastructure/Infrastructure.csproj --startup-project src/WebUI/WebUI.csproj --output-dir Persistence/Migrations修复.NET SDK安装
若以上方法无效,可能是SDK文件损坏,重新安装对应版本的.NET 6 SDK:- 卸载当前的6.0.321 SDK
- 从微软官方渠道下载并重新安装同版本SDK
简化命令参数格式
尝试移除迁移名称的引号,避免特殊字符解析问题:dotnet ef migrations add TestMigration --project src/Infrastructure --startup-project src/WebUI --output-dir Persistence/Migrations
内容的提问来源于stack exchange,提问作者David Borštner

