Visual Studio Code:找不到preLaunchTask 'build'?

20

我已经使用以下命令创建了一个新的.NET Core应用程序:

dotnet new console -o test

当我尝试在Visual Studio Code调试器中运行它时,出现以下错误:

Could not find the preLaunchTask 'build'?

Visual Studio Code为我生成了这些文件:

tasks.json:
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "command": "dotnet",
    "isShellCommand": true,
    "args": [],
    "tasks": [
        {
            "taskName": "build",
            "args": [ ],
            "isBuildCommand": true,
            "showOutput": "silent",
            "problemMatcher": "$msCompile"
        }
    ]
}

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceRoot}/bin/Debug/<target-framework>/<project-name.dll>",
            "args": [],
            "cwd": "${workspaceRoot}",
            "stopAtEntry": false,
            "console": "internalConsole"
        },
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceRoot}/bin/Debug/<target-framework>/<project-name.dll>",
            "args": [],
            "cwd": "${workspaceRoot}",
            "stopAtEntry": false,
            "launchBrowser": {
                "enabled": true,
                "args": "${auto-detect-url}",
                "windows": {
                    "command": "cmd.exe",
                    "args": "/C start ${auto-detect-url}"
                },
                "osx": {
                    "command": "open"
                },
                "linux": {
                    "command": "xdg-open"
                }
            },
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "sourceFileMap": {
                "/Views": "${workspaceRoot}/Views"
            }
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ]
}
我的问题看起来与这个类似,但在我的情况下,launch.json和tasks.json中的preLaunchTask名称没有不匹配,因此该答案在这种情况下不适用。我正在运行Visual Studio Code版本1.11.2和.NET Core 1.1(在发布此帖子时是最新版本)。
我已经在Windows机器和Mac上尝试了相同的方法,但出现了相同的问题。如果我执行“dotnet restore”和“dotnet run”命令,则代码可以正常运行,但我仍然会收到相同的错误:“找不到preLaunchTask'build'”。

@OlavT 有任何解决方案吗? - Jagadeesh Govindaraj
https://github.com/Microsoft/vscode/issues/22250 - Jagadeesh Govindaraj
我认为 Prelaunch 任务只能在 tasks.json 中将版本设置为 2.0.0 才能起作用。看一下 jagadeesh 提供的样例。 - Jon
6个回答

21

对我来说,在创建tasks.json和/或launch.json文件后重新启动VS Code是有效的。

还要注意,您需要在launch.json中更新"program"设置为dlls的路径。


感谢重新启动 VS Code,这使我解决了问题。但是,现在它抱怨像这样的问题:"预定义类型 'System.Object' 未定义或未导入..."。难道 VS Code 不应该提示从 VS Code 执行 "dotnet restore" 吗?我记得以前看到过这个提示。 - OlavT
通常情况下,它应该会这样做。现在不确定 VS Code 是如何决定何时显示该提示的。无论如何,您始终可以在 VS Code 内部的终端手动执行 dotnet restore - Set
我也记不起来我曾经需要在launch.json文件中手动设置程序路径进行调试。为什么VS Code不能在幕后完成这些技巧呢?它应该知道在不涉及用户的情况下如何找到可执行文件。 - OlavT
@OlavT 这是 omnisharp-vscode 的责任,该团队将在未来提供此功能。如果感兴趣,您可以查看这个 issue - Set

8

请将tasks.json更改如下。

tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "command": "",
    "args": [],
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",
            "type": "shell",
            "args": [
                "build"
            ],
            "options": {
                "cwd": "${workspaceRoot}"
            },
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared"
            },
            "problemMatcher": "$msCompile"
        }
    ]
}

4
另一个导致此错误的原因可能是,使用的启动配置在my_project.code-workspace文件中定义(而不是在launch.json文件中)。 在这种情况下,tasks.json不会被使用,但必须在my_project.code-workspace文件中定义任务。
这可能是一种“特性”,但它的行为像一个bug,因为: - 任务文档tasks doc说:“工作区或文件夹特定任务是从工作区.vscode文件夹中的tasks.json文件配置的。” - 错误“无法找到任务'xxx'。”对话框窗口提供了按钮:“Configure Task”,然后打开或提供创建文件./.vscode/tasks.json - 在编辑tasks.json文件时没有提到或明显的提示表明它将不会被使用。与编辑setting.json相比,在这种情况下文本被变暗,并且当鼠标悬停时会显示消息:“此设置不能在此工作区应用。当您直接打开包含的工作区文件夹时,它将被应用。”
如果使用调试配置文件my_debug_config(工作区)启动调试会话,则只会使用在my_project.code-workspace文件中定义的任务。
但是,在仍然打开相同的工作区的情况下,选择在launch.json文件中定义的dir_debug_config(my_dir)调试配置文件,将会使用tasks.json文件中的任务。

正是我的问题..是否有错误报告? - puio
我没有找到一个解决方案,也没有创建一个新的。git有5k个未解决的问题,并被误用为支持论坛。在那里报告似乎毫无意义。 - papo
1
在类似的开放性问题上发布了另一个答案,并附带了一些相关错误报告的链接。https://dev59.com/AlsV5IYBdhLWcg3wpQN8#69967477/ - puio

1
尝试使用绝对路径更改tasks.jsonlaunch.json中的路径。

例如,在launch.json中:

"program": "C:/Projects/MyProject/bin/Debug/netcoreapp1.0/XXXX.dll",
"cwd": "C:/Projects/MyProject/"

tasks.json 中:
"tasks": [
  {
    "label": "build",
    "command": "dotnet",
    "type": "process",
    "args": [        
      "build",
      "C:/Projects/MyProject/XXXXXX.csproj"

0

提醒一下 -

如果workspaceFolder不在与应用程序文件夹(例如tasks.json)相同的级别上,则不会创建该文件,您将收到所有上述错误。我在打开项目后创建了一个子文件夹,并获得了所有上述错误 - 在从正确的文件夹运行调试后,所有问题都得到了解决 - 这可能解释了重新启动VS代码的影响。


0

这个问题已经在主分支中解决了,将会在下一个版本中发布。重新打开文件夹可以帮助解决问题。


4
我已经安装了最新版本,但仍然遇到相同的问题。我需要手动创建一个 "tasks.json" 文件吗?好像没有自动创建这个文件。 - melston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接