Visual studio code 如何在VSCode扩展中持久化when子句上下文

Visual studio code 如何在VSCode扩展中持久化when子句上下文,visual-studio-code,vscode-extensions,Visual Studio Code,Vscode Extensions,我按照的文档添加了一个自定义when子句上下文 我设置了一个布尔上下文: let start=vscode.commands.registerCommand('myExt.start',()=>{ vscode.commands.executeCommand('setContext','myExt.activated',true); }); 但是在VSCode重新启动后,即使myExt.activated为true。VSCode忘记它 “资源管理器/上下文”:[ { “命令”:“myExt.f

我按照的文档添加了一个自定义when子句上下文

我设置了一个布尔上下文:

let start=vscode.commands.registerCommand('myExt.start',()=>{
vscode.commands.executeCommand('setContext','myExt.activated',true);
});
但是在VSCode重新启动后,即使
myExt.activated
true
。VSCode忘记它

“资源管理器/上下文”:[
{
“命令”:“myExt.filter”,
“何时”:“myExt.activated”
}
]
即使上次
myExt.activated
true
时,VSCode重新启动后也不显示

另外,当使用
Developer:Inspect context key
命令调试上下文时,
myExt.activated
不存在


当VSCode之间的子句上下文重新启动时,有什么方法可以持久化吗?

因为答案出现在注释中(由@rioV8和@Mark提供),我将在这里总结它们:

用于存储持久数据的有
globalState
workspaceState
(来自
ExtensionContext


为了存储持久化上下文,我们必须使用
globalState
workspaceState
来存储状态,并注册到
*
onStartupFinished
激活事件,并立即调用
setContext
,以获取持久化存储的状态。

使用
globalStorageUri
globalState
来自
ExtensionContext
我已经在使用
workspaceState
用于其他内容,因为我需要工作区范围。但是我没有成功地在
when子句
(不出现在上下文键中)中使用它。是否有什么原因使您在激活扩展时不执行
setContext
命令?你现在是通过一个命令来完成的-只需执行
activate
函数顶部的execute部分就可以了。但正如您所看到的,我正在为
explorer/context
做贡献,并在激活方式上执行
setContext
——我必须注册到
*
onstartupfointed
,我认为这是不必要的,我想避免它。另一个“问题”是菜单在激活完成之前无法访问。。。