これは私を夢中にさせています(気が狂います!)。ビルド/実行ファイルは適切で、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}"
]
}
]
}