VSCode 调试时找不到 src 目录中的 .sln 文件,如何指定正确路径?
在 .vscode/tasks.json 中找到 label 为 "build" 的任务,将传给 dotnet build 的 .sln 路径改为:
${workspaceFolder}/src/ArcadeManager.sln
launch.json 中的 "preLaunchTask": "build" 会在调试前执行这个任务,解决方案的构建路径也在这个任务中配置。
为什么修改 launch.json 的 cwd 没有效果?
错误发生在调试前的构建阶段。日志显示,构建命令查找的是工作区根目录下的 ArcadeManager.sln,路径中少了 src 这一层。
这几个配置项的用途不同:
preLaunchTask:指定调试前执行的任务,值必须与任务的label一致。program:指定调试器要启动的程序集。cwd:设置被调试程序运行时的工作目录。
修改 launch.json 中的 cwd 不会改变构建任务里指定的 .sln 路径。
修改 .vscode/tasks.json
假设 VSCode 打开的工作区根目录是仓库目录,文件结构如下:
arcade-manager/
├── .vscode/
│ ├── launch.json
│ └── tasks.json
└── src/
├── ArcadeManager.sln
└── ArcadeManager.Console/
打开 .vscode/tasks.json,修改现有的 build 任务。如果文件不存在,可以创建并填入以下配置:
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "process",
"command": "dotnet",
"args": [
"build",
"${workspaceFolder}/src/ArcadeManager.sln",
"--configuration",
"Debug",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
}
]
}
需要修改的是 args 中紧跟 "build" 的路径。每个参数都是独立的 JSON 字符串,即使路径包含空格,也不需要额外添加引号。
在现有的 launch.json 中保留:
"preLaunchTask": "build"
它与任务的 "label": "build" 对应。如果已有同名任务,直接修改即可,避免重复添加。
保留控制台项目的启动路径
修正构建任务后,题目中的 launch.json 可以继续使用,前提是构建生成了以下文件:
src/ArcadeManager.Console/bin/Debug/net8.0/ArcadeManager.Console.dll
即使 dotnet build 构建了整个解决方案,调试器仍会启动 program 指定的控制台程序集,其中的 Web API 不会自动一起启动。
net8.0 必须与控制台项目实际使用的目标框架一致。如果修改过程序集名称或输出目录,也需要相应调整 program。
只构建控制台项目时的写法
如果只需要构建控制台项目,可以将任务中的 .sln 路径替换为 .csproj 路径。假设项目文件名为 ArcadeManager.Console.csproj,args 可以写成:
"args": [
"build",
"${workspaceFolder}/src/ArcadeManager.Console/ArcadeManager.Console.csproj",
"--configuration",
"Debug",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
]
dotnet build 会同时构建该项目通过项目引用依赖的其他项目。如果实际文件名不同,请按磁盘上的名称填写。
路径仍然报错时检查什么?
先确认 ${workspaceFolder} 指向的目录。如果 VSCode 直接打开的是 src 文件夹,解决方案路径应写成:
${workspaceFolder}/ArcadeManager.sln
此时,launch.json 中 program 和 cwd 的路径也要去掉多余的 /src。
也可以在仓库根目录的终端中执行:
dotnet build "./src/ArcadeManager.sln" --configuration Debug
如果仍然出现 MSB1009,检查文件是否存在,目录和文件名是否拼写正确。题目日志中的 arcademanager 与 arcade-manager 写法不一致,应以本地实际目录为准。
确认构建成功且目标 DLL 已生成后,在 VSCode 中选择 ArcadeManager Console,按 F5 启动调试。
备注:内容仅供参考。
