2017-10-16 226 views
0

在較新版本的VSCode中,我可以創建與我在tasks.json中定義的任何任務的綁定。例如,下面VSCode:如何使用JavaScript API執行任意任務?

{ 
    "version": "2.0.0", 
    "tasks": [ 
    { 
     "label": "Clean", 
     "type": "shell", 
     "command": "clean.cmd", 
     "problemMatcher": [] 
    }, 
    { 
     "label": "Build", 
     "type": "shell", 
     "command": "build.cmd", 
     "problemMatcher": [], 
     "group": { "kind": "build", "isDefault": true } 
    }, 
    { 
     "label": "Flash", 
     "type": "shell", 
     "command": "flash.cmd", 
     "problemMatcher": [] 
    } 
    ] 
} 

的3個任務我可以創造鍵綁定與

[ 
    { 
    "key": "alt+f9", 
    "command": "workbench.action.tasks.runTask", 
    "args": "Clean" 
    }, 
    { 
    "key": "ctrl+f9", 
    "command": "workbench.action.tasks.build" 
    }, 
    { 
    "key": "f9", 
    "command": "workbench.action.tasks.runTask", 
    "args": "Flash" 
    } 
] 

,一切都按預期工作。我嘗試使用VSCode API在擴展內部(例如Script Commands)執行相同的操作,但它僅適用於buildtest任務。

調用

vscode.commands.executeCommand("workbench.action.tasks.build") 

的作品,但

vscode.commands.executeCommand("workbench.action.tasks.runTask", ["Clean"]) 

打開任務選擇列表。

如何使用JavaScript代碼直接啓動除buildtest以外的其他任務?

回答

0

你的任務配置文件看起來很舊。如果您使用Visual Studio Code的新版本,那麼您應該升級。

我認爲api期待任務有一個「標籤」字段。

https://code.visualstudio.com/docs/editor/tasks#_convert-from-010-to-200

所以intsead的:

{ 
    "taskName": "Clean", 
    "type": "shell", 
    "command": "clean.cmd", 
    "problemMatcher": [] 
}, 

它應該是:

{ 
    "label": "Clean", 
    "type": "shell", 
    "command": "clean.cmd", 
    "problemMatcher": [] 
}, 

更新:嘗試只用字符串調用它,而不是在一個這樣的數組包裹它的:

vscode.commands.executeCommand("workbench.action.tasks.runTask", "Clean") 
+0

我已升級但不影響我的問題.'label'或'taskName'(它仍然受支持),我可以從UI運行任務但不使用JavaScript API。儘管如此,你的回答提醒我要更新這個問題。謝謝。 – Borcut