【问题标题】:VSCode how to clear workspaceState data globally?VSCode如何全局清除workspaceState数据?
【发布时间】:2020-09-21 12:32:31
【问题描述】:

我已经使用 workspaceState 在我的扩展中实现了每个工作区的备份功能。由于数据可能很敏感 - 我想在扩展停用/卸载时清除所有工作区状态。

ExtensionContext 无法使用它们的 workspaceStates 清除不同工作区中的所有扩展相关数据。

所以我考虑在 ExtensionContext globalState 上保存数据,用工作区 id 标记每个条目。问题是工作空间命名空间没有提供唯一标识当前工作空间的方法。我考虑过对工作区名称和路径进行哈希处理,但这两者都是可变的,任何更改都会破坏指向数据的指针。这正是我不能将文件写入内部文件夹的原因。我唯一的其他解决方案是将备份数据直接写入工作区,我想避免这种情况。

VSCode如何维护哪个workspaceState属于哪个workspace的知识?如何将数据绑定到工作区,但可以从 VSCode 中的其他任何地方访问?

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案1】:

    附注:一般情况下,您应该避免保存敏感数据。如有必要,请尝试对其进行加密。

    无论如何:

    我没有完整的答案,但我正在研究类似的东西(由于 WorkspaceState 中的设置无效,我使用的扩展程序崩溃)。

    我在此文件夹(windows)中找到了 Workspace 状态的存储:

    %appdata%\Code\User\workspaceStorage\

    在那里,您会发现许多具有基于十六进制名称的文件夹。在这些文件夹中,我总是找到 2 个名为 state.vscdbstate.vscdb.backup 的文件。

    通常有一个名为workspace.json 的第三个文件,它可以帮助您确定您是否在正确的工作区中。 (但您必须遍历所有文件夹 - 也许有办法找出来自扩展 API 的文件夹名称?)

    如果你打开state.vscdb-文件,你会发现一些在我看来很像序列化对象的东西。它确实有一些未知功能的分隔符字符。但您也可以在其中找到明显来自不同 VSC 模块的完整路径或名称 - 包括扩展。

    我不需要担心其他缓存的内容,我只需删除整个文件夹即可解决我当前的问题。但我很确定,如果有必要,可以弄清楚文件的构建方式并编辑掉您的敏感数据。

    state.vscdb.backup-文件看起来很像名字告诉你的:他们可能只是每隔几分钟就复制另一个文件,这样你就有一个后备位置。

    【讨论】:

    • 什么是存储库?谢谢,出于好奇,我会查看state.vscdb 文件,尽管我已决定放弃相关功能。
    • @EcksDy 抱歉,我把“存储库”搞砸了。首先,它被称为“Key Vault”,它是一个 MS Azure 服务。 - 如果您想将扩展发布给未知客户,我不建议您使用它。 - 这是一个很好的工具,但它并不真正符合 VSC 的“免费开源”精神。我们在内部使用这些东西来存储我们的敏感数据,因为无论如何我们都有某种“免费试用”。我肯定会做的是加密敏感数据。
    • 这是一个公共扩展,所以密钥库确实不是一个选项,感谢澄清:)
    • 在 Mac 上我在 $HOME/Library/Application Support/Code/User/workspaceStorage 中找到了这个 state.vscdb 似乎是一个 sqlite3 文件,所以我打开了相应的工作区并且能够使用 update ItemTable set value = '{}' where key = 'eamodio.gitlens'; 来清除 gitlens 默认值远程设置。
    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 2011-08-20
    • 2016-11-04
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2013-01-29
    相关资源
    最近更新 更多