PAYATHON 2026

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 启动调试。

备注:内容仅供参考。