2016-02-11 2 views
3

Это заставляет меня гайки (гайки!). Файл сборки/запуска является правильным, а команда fmt является правильной. Но если я попытаюсь объединиться в один файл задач, он перестанет работать.VS Code tasks.json - Задачи работают индивидуально, но не объединены.

Эти два прекрасно работают сами по себе и вести себя так, как я хочу:

tasks.json

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

tasks.json

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

Но объединены в один файл, он будет не работает:

tasks.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) 

Я не могу понять, почему это работает в одну сторону, а не другой. Второй способ (для комбинированных задач) изложена здесь: Define multiple tasks in VSCode


Ответ: Проблема заключается в добавлении «сборки» или «FMT» в качестве аргументов, когда он уже включен в список TASKNAME. Я не знал, как это работает. Заключительный рабочий продукт, который позволяет пользователям разрабатывать, не заботясь о тупых окон брандмауэров:

tasks.json (конечная & работает благодаря @ не-а-игрок в гольф)

{ 
"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}" 
     ] 
    } 
] 
} 

ответ

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}" 
     ] 
    } 
] 
} 
+0

добавления "&&", "$ {workspaceRoot} .exe" работает для меня. Я предполагаю, что проблема связана с тем, что я снова перечисляю имя задачи внутри аргументов. Спасибо! – victoroux

+0

@victoroux это научило меня об этой функции в vscode, которую я не знал, поэтому спасибо :) –

0

вы должны добавить атрибут suppressTaskName.

OPs решение удалить лишние build параметр, очевидно, работает, однако, VSCode's documentation охватывает этот самый пример:

Положим suppressTaskName истина, как по умолчанию имя задачи также передается команде, которая приведет к " echo hello Hello World ".

{ 
    "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"] 
     } 
    ] 
} 
0

Моя любимая задача сборки:

{ 
"version": "0.1.0", 
"isShellCommand": true, 
"showOutput": "always", 
"command": "go", 
"echoCommand": true , 
"options": { 
    "cwd": "${fileDirname}" 
}, 
"tasks": [ 
    { 
     "taskName": "build", 
     "args": [ 
      "build", 
      "-x" 
     ], 
     "isBuildCommand": true, 
     "suppressTaskName": true 
    } 
] 
} 
Смежные вопросы