如何在 VSCode 任务错误中配置文件路径

how to configure files paths in VSCode task errors

我在VSCode配置了一个任务来编译一个Delphi 2005 dpk。它正在工作并返回 "problems view" 上的错误,但未在文件中显示该错误。

我认为它正在发生,因为当我点击错误时,我收到错误消息:

Unable to open 'sr075pro.pas': File not found (...projectfolder\sr075pro.pas)

但是文件在...projectfolder\webservices\sr075pro.pas.

我找不到告诉任务文件在子文件夹中的方法。我尝试在 "fileLocation" 标签上使用 "relative" 选项但没有成功。

返回的错误:

Compiling sa_webservices...
Borland Delphi  Version 13.0  Copyright (c) 1983,99 Inprise Corporation
sr075pro.pas(99) Error: Undeclared identifier: 'ni'
sa_webservices.dpk(802) Fatal: Could not compile used unit 'sr075pro.pas'

我的任务配置:

{
  "version": "0.1.0",
  "name": "Compilar",
  "command": "C:\Compilers\compile.bat",
  "suppressTaskName": true,
  "isShellCommand": true,
  "isBuildCommand": true,
  "tasks": [
{
      "taskName": "Compile sa_webservices",
      "isBuildCommand": false,
      "isTestCommand": false,
      "showOutput": "always",
      "args": [
        "sa_webservices"
      ],
      "problemMatcher": {
        "owner": "external",
        "fileLocation": "relative",
        "pattern": {
          "regexp": "^([\w]+\.(pas|dpr|dpk))\((\d+)\)\s(Fatal|Error|Warning|Hint):(.*)",
          "file": 1,
          "line": 3,
          "message": 5
        }
      }
    }

我的compile.bat:

@echo off
@P:
@set arg1=%1
shift

...
if "%arg1%" == "sa_webservices" set arg2="webservices" 
...
echo Compiling %arg1%...
cd\%arg2% 
dcc32.exe -H -W -Q %arg1%.dpk

你的任务配置有误。首先,您没有关闭所有括号,但我想这是在 Whosebug 上复制并粘贴它所犯的错误。否则任务配置根本无法工作。

现在真正的问题: DCC32 生成包含相对文件路径的提示和警告。这些路径相对于项目文件。在您的任务配置中,您通过设置

来定义编译器的输出以包含相对路径
"fileLocation": "relative"

Visual Studio 代码不知道如何根据编译器消息给出的相对路径构建正确的绝对路径。因此它猜测您当前的 ${workspaceRoot}(在您的情况下是 projectfolder)将是绝对路径。

这解释了为什么您会看到包含错误文件路径的错误和警告。为了获得正确的路径,您需要告诉 VSCode 正确的 路径以组合相对路径。 您只需将正确的路径添加到 tasks.json 中的 fileLocation 条目即可:

"fileLocation": ["relative", "${workspaceRoot}\webservices"]

整个tasks.json看起来像这样:

{
    "version": "0.1.0",
    "name": "Compilar",
    "command": "C:\Compilers\compile.bat",
    "suppressTaskName": true,
    "isShellCommand": true,
    "isBuildCommand": true,
    "tasks": [
        {
            "taskName": "Compile sa_webservices",
            "isBuildCommand": false,
            "isTestCommand": false,
            "showOutput": "always",
            "args": [
                "sa_webservices"
            ],
            "problemMatcher": {
                "owner": "external",
                "fileLocation": ["relative", "${workspaceRoot}\webservices"],
                "pattern": {
                    "regexp": "^([\w]+\.(pas|dpr|dpk))\((\d+)\)\s(Fatal|Error|Warning|Hint):(.*)",
                    "file": 1,
                    "line": 3,
                    "message": 5
                }
            }
        }
    ]
}