3

これは私を夢中にさせています(気が狂います!)。ビルド/実行ファイルは適切で、fmt コマンドは適切です。しかし、1 つのタスク ファイルに結合しようとすると、機能しなくなります。

これら2つは単独で正常に動作し、私が望むように動作します:

タスク.json

{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"taskName": "build",
"args": [
    "build",
    "-o",
    "${workspaceRoot}.exe",
    "&&",
    "${workspaceRoot}.exe"
],
"isBuildCommand": true
}

タスク.json

{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"taskName": "fmt",
"args": [
    "fmt",
    "${file}"
],
"isBuildCommand": true
}

ただし、1 つのファイルに結合すると、機能しません。

タスク.json

{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"tasks": [
    {
        "taskName": "build",
        "args": [
            "build",
            "-o",
            "${workspaceRoot}.exe",
            "&&",
            "${workspaceRoot}.exe"
        ],
        "isBuildCommand": true
    },
    {
        "taskName": "fmt",
        "args": [
            "fmt",
            "${file}"
        ]
    }
]
}

ビルド時に発生するエラー:

can't load package: package build: cannot find package "build" in any of:
    D:\dev\Go\src\build (from $GOROOT)
    D:\dev\Gopher\src\build (from $GOPATH)
can't load package: package -o: cannot find package "-o" in any of:
    D:\dev\Go\src\-o (from $GOROOT)
    D:\dev\Gopher\src\-o (from $GOPATH)
can't load package: package d:/dev/Gopher/src/myproject.exe: cannot find package "d:/dev/Gopher/src/myproject.exe" in any of:
    D:\dev\Go\src\d:\dev\Gopher\src\myproject.exe (from $GOROOT)
    D:\dev\Gopher\src\d:\dev\Gopher\src\myproject.exe (from $GOPATH)

なぜそれが一方の方法で機能するのか、もう一方の方法では機能しないのか理解できないようです。2 番目の方法 (結合されたタスクの場合) の概要は次のとおりです: VSCode で複数のタスクを定義する


回答: 問題は、既にタスク名としてリストされている場合に、「build」または「fmt」を引数として追加することにあります。それが taskname の仕組みだとは知りませんでした。ユーザーが愚かな Windows ファイアウォールを気にせずに開発できるようにする最終的な作業製品:

tasks.json (@not-a-golfer のおかげで最終的な作業)

{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"echoCommand": true ,
"tasks": [
    {
        "taskName": "build",
        "args": [
            "-o",
            "${workspaceRoot}.exe",
            "&&",
            "${workspaceRoot}.exe"
        ],
        "isBuildCommand": true
    },
    {
        "taskName": "fmt",
        "args": [
            "${file}"
        ]
    }
]
}
4

3 に答える 3

3

以下は機能しているようですが、次のように実行を連鎖させることはできないようです&&:

{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"echoCommand": true ,
"tasks": [
    {
        "taskName": "build",
        "args": [
            "-x",
            "-o",
            "${workspaceRoot}.exe"
        ],
        "isBuildCommand": true
    },
    {
        "taskName": "fmt",
        "args": [
            "${file}"
        ]
    }
]
}
于 2016-02-11T17:25:50.337 に答える
0

属性を追加する必要がありますsuppressTaskName

余分なパラメーターを削除する OP ソリューションはbuild明らかに機能しますが、VSCode のドキュメントでは次の例が取り上げられています。

suppressTaskNameデフォルトではタスク名もコマンドに渡され、結果として「echo hello Hello World」になるため、true に設定します。

{
    "version": "0.1.0",
    "command": "echo",
    "isShellCommand": true,
    "args": [],
    "showOutput": "always",
    "echoCommand": true,
    "suppressTaskName": true,
    "tasks": [
        { 
            "taskName": "hello",
            "args": ["Hello World"]
        },
        { 
            "taskName": "bye",
            "args": ["Good Bye"]
        }
    ]
}
于 2016-10-15T09:13:55.573 に答える