当所有扩展都被禁用时,这个问题是否会发生?:是
- VS Code 版本:1.87.2(用户设置)
- OS 版本:Windows 10 x64 - 22H2(OS 构建 19045.4046)
错误行为:
当在不相关打开的文件的问题选项卡中存在错误时,任何后台 preLaunchTask 将在声称有错误并显示消息框时完成:
Error exists after running preLaunchTask '<TaskName>'.
预期行为:
有时这些错误可能是由扩展错误地显示的,或者在这种情况下,只是在 JSON 文件中使用 JSONC 语法,因为您的项目可能恰好支持该功能。在任何情况下,这些错误可能与运行的启动配置无关,而且它 绝对不是像 VSCode 所声称的 preLaunchTask 中的特定错误。因此,当任务本身没有检测到问题时,preLaunchTask 不会出现此消息框。
其他信息:
- 在运行启动配置时,开发者控制台没有显示错误。
- 在测试之前可以暂时禁用扩展,但在 VSCode 中打开文件夹会重新启用它们,因此需要手动禁用(然后重新加载窗口)。
- 此问题既可以在 Windows 上发生,也可以在 WSL2 Ubuntu Docker 开发容器(以及其他地方)中发生。
- 进一步的测试表明,这只能针对后台问题匹配器触发。创建一个正常模式,它不会在任务自然完成后抱怨错误。
重现步骤:
- 在 VSCode 中打开一个空文件夹并创建以下所示的文件。
- 确保 problem.json 在编辑器中打开,并且由于注解而在问题选项卡中突出显示错误。
- 运行 PreLaunchTask Test 启动配置。
- 在一秒钟后,VSCode 将显示一个消息,声称 preLaunchTask 有错误(后台问题匹配器结束的那一刻)。
- 从 problem.json 中删除注解或关闭文件,并确保其问题从问题选项卡中消失。
- 再次运行启动配置,它应该不会出现错误(如预期)。
需要重现的文件:
.vscode/launch.json:
{
"version": "0.2.0",
"configurations": [{
"name": "PreLaunchTask Test",
"type": "node-terminal",
"request": "launch",
"command": "sleep 1; exit",
"preLaunchTask": "Background Task"
}]
}
.vscode/tasks.json:
{
"version": "2.0.0",
"tasks": [{
"label": "Background Task",
"type": "shell",
"command": "echo \"Preparing...\"; sleep 1; echo \"Ready\"; sleep 5",
"isBackground": true,
"problemMatcher": {
"pattern": { "regexp": "", "file": 0, "location": 0, "message": 0 },
"background": {
"activeOnStart": true,
"beginsPattern": "Preparing",
"endsPattern": "Ready"
}
}
}]
}
problem.json:
{
// This is a problem
}
6条答案
按热度按时间g6ll5ycj1#
确实,这仅影响后台任务,因为如果一个任务以成功退出码退出,我们会忽略任何检测到的问题。后台任务仍在运行,我们实际上没有方法知道它是否产生了错误。
嘿@meganrogge,我们运行任务,然后使用
IMarkerService
检查所有标记。是否有合理的方式来了解一个标记是否来自我们运行的任务?js81xvg62#
是的,这个
terminalMap
包含一个任务及其problemMatcher
vscode/src/vs/workbench/contrib/tasks/browser/taskTerminalStatus.ts
第80行
| | this.terminalMap.set(terminal.instanceId,{ terminal, task, status, problemMatcher,taskRunEnded: false}); |
以及
problemMatcher
包含一个markers
类型的Mapvscode/src/vs/workbench/contrib/tasks/common/problemCollectors.ts
第55行
| | privatemarkers: Map<string,Map<string,Map<string,IMarkerData>>>; |
wz3gfoph3#
看起来
terminalMap
并没有在外部暴露,对吗?tcbh2hod4#
正确
iovurdzv5#
是否使用info-needed标签来描述这个问题?我找不到其他更适合从同事那里获取信息的标签(所以使用它是有意义的)。但是粉色标签似乎都与问题被延迟/等待作者输入有关(我假设这不是这里的意图)。所以我只是担心这可能会因为没有回应任何事情而被无意中忽略。
6pp0gazn6#
能够运行一个任务并找出该任务是否产生错误会很好,但我无法评估为将该概念添加到任务系统中需要多少努力。