VSCode:如何使用JavaScript API执行任意任务?

VSCode:如何使用JavaScript API执行任意任务?

问题描述:

在较新版本的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以外的其他任务?

你的任务配置文件看起来很旧。如果您使用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