找不到preLaunch任务'build'

时间:2016-03-13 20:47:12

标签: c# visual-studio visual-studio-code

要配置Visual Studio Code以在OSX上调试C#脚本,我按照以下文章中列出的所有步骤进行操作:

Debugging C# on OSX with Visual Studio Code

当我尝试调试示例C#脚本时,Visual Studio Code报告了此错误:

  

无法找到preLaunch任务'build'

因此,我无法检查脚本中定义的变量。

这是 launch.json 文件的副本:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch console application",
            "type": "mono",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceRoot}/Program.exe",
            "args": [],
            "cwd": "${workspaceRoot}",
            "stopAtEntry": false
        }
    ]
}

这是 tasks.json 文件的副本:

{
    "version": "0.1.0",
    "command": "mcs",
    "args": [
        "-debug",
        "Program.cs"
    ],  
    "showOutput": "silent",
    "taskSelector": "/t:",
    "tasks": [
        {
            "taskName": "exe",
            "isBuildCommand": true,
            "problemMatcher": "$msCompile"
        }
    ]
}

如何解决此问题?

5 个答案:

答案 0 :(得分:40)

您可以使用Visual Studio代码来解决它。

当您看到错误消息时,请单击下面的步骤 error sample

  1. 配置任务
  2. 从模板
  3. 创建tasks.json文件
  4. NET Core执行.NET Core构建命令
  5. VSCode将创建一个类似的文件:

    {
        // See https://go.microsoft.com/fwlink/?LinkId=733558
        // for the documentation about the tasks.json format
        "version": "2.0.0",
        "tasks": [
            {
                "label": "build",
                "command": "dotnet build",
                "type": "shell",
                "group": "build",
                "presentation": {
                    "reveal": "silent"
                },
                "problemMatcher": "$msCompile"
            }
        ]
    }
    

    它已经完成了。 VSCode将在运行之前构建项目。

答案 1 :(得分:22)

发生错误是因为Visual Studio代码在 tasks.json 中找不到taskName值设置为'build'的任何任务。

launch.json 文件的preLaunchTask属性定义了在启动脚本之前应执行的任务。从这个问题来看,Visual Studio Code已经配置为在启动脚本之前运行任务build

preLaunchTask: 'build'

tasks.json 文件中没有名为'build'的任务。

要解决此问题,您应该将preLaunchTask属性的值更改为'exe',这是在 tasks.json 文件中定义的构建任务。

答案 2 :(得分:5)

对于每种情况,似乎都会有所不同。

对我来说@Jeferson Tenorio的工作方式,但它需要更多的步骤,所以让我们添加它们:

  1. 点击配置任务: enter image description here
  2. 从模板
  3. 创建tasks.json文件
  4. .NET Core执行.NET Core构建命令
  5. 转到您的launch.json文件,在配置/程序下,您会发现:

    ${workspaceFolder}/bin/Debug/<insert-target-framework-here>/<insert-project-name-here>.dll

    只需将<insert-target-framework-here><insert-project-name-here>替换为您的目标框架,在我的情况下为netcoreapp2.0,然后替换您的项目名称(如果您没有更改任何项目名称应该是与您创建项目的文件夹相同),它应如下所示:

    "program": "${workspaceFolder}/bin/Debug/netcoreapp2.0/MyProject.dll"

    我希望这会有所帮助。

答案 3 :(得分:0)

在Linux上,要使build命令起作用,我需要从以下位置更改task.json文件:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet build",
            "type": "shell",
            "args": [
                // Ask dotnet build to generate full paths for file names.
                "/property:GenerateFullPaths=true",
                // Do not generate summary otherwise it leads to duplicate errors in Problems panel
                "/consoleloggerparameters:NoSummary"
            ],
            "group": "build",
            "presentation": {
                "reveal": "silent"
            },
            "problemMatcher": "$msCompile"
        }
    ]
}

收件人:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",
            "type": "shell",
            "args": [
                "build"
                // Ask dotnet build to generate full paths for file names.
                "/property:GenerateFullPaths=true",
                // Do not generate summary otherwise it leads to duplicate errors in Problems panel
                "/consoleloggerparameters:NoSummary"
            ],
            "group": "build",
            "presentation": {
                "reveal": "silent"
            },
            "problemMatcher": "$msCompile"
        }
    ]
}

这样做的原因是Linux将VSC生成的任务视为运行命令“ dotnet build”而不是带有“ build”参数的“ dotnet”。如果不进行更改,您将收到带有退出代码127的“ dotnet build:命令未找到”

答案 4 :(得分:0)

对于 Ubuntu Linux 20.04 LTS(但在其他操作系统上很可能是相同的)让 preLaunchTask 为我工作的原因是同时使用本地 tasks.json 和 launch.json

所以我的文件夹结构(预构建)是:

.vscode/launch.json
.vscode/tasks.json
dist
src/index.ts
package.json
tsconfig.json

我的 launch.json 包含:

{
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "TS preLaunchTask-build",
            "program": "${file}",
            "preLaunchTask": "tsc: build",
            "outFiles": ["${workspaceFolder}/dist/**/*.js"],
            "skipFiles": [
                "<node_internals>/**", "node_modules",
              ]
        },
    ]
}

我的 tasks.json 包含:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "command": "echo hello yes working!",
            "problemMatcher": [],
            "label": "myTask"
        },
        {
            "type": "typescript",
            "tsconfig": "tsconfig.json",
            "problemMatcher": ["$tsc"],
            "group": "build",
            "label": "tsc: build"
        },
    ]
}

我的 tsconfig.json 包含:

{
  "compilerOptions": {
      "outDir": "./dist",
      "sourceMap": true,
      "target": "es5",
      "module": "commonjs"
  },
  "include": [
      "src/**/*"
  ]
}

用法:在 index.ts 中,只需按 F5 设置断点

我还包含了另一个任务“myTask”,您可以将 launch.json 中的 preLaunchTask 行更改为:"preLaunchTask": "myTask",(它将向控制台输出一些文本以验证 preLaunchTask 现在正在工作)

这样,如果您仍然有问题,您可以查看问题是在您的 tsconfig 设置中,还是 preTaskLaunch 设置问题。

(我原以为它应该自己解决这个问题,但显然不是在当前撰写本文时 - 但确实强制(对我而言)基于项目而不是全局配置将调试配置提交到 repo 的优势)