VSCode 在哪里存储扩展的启用/禁用状态? [重复]

问题描述 投票:0回答:2

我安装了一些仅在特定工作区中启用的扩展。

通过设置,通常工作区特定的内容保存在工作区文件夹内的 .vscode/settings.json 中。然而,扩展似乎并非如此。

我知道扩展本身安装在用户配置文件文件夹中的 .vscode/extensions 中,但我找不到任何指示它们是否启用或禁用的内容。对于本地、远程和给定工作空间都是如此。

检查设置同步似乎显示了一个extensions.json,其中列出了所有已安装的扩展及其启用/禁用状态,但我在工作区、远程或本地的任何地方都找不到此文件。

这个配置文件在哪里?

visual-studio-code
2个回答
8
投票

从快速测试看来,扩展状态存储在

state.vscdb
sqlite 数据库中的
extensionsIdentifiers/disabled
键下

全球:

<vsc user profile folder>/user-data/User/globalStorage/state.vscdb

特定于工作空间:

<vsc user profile folder>/user-data/User/workspaceStorage/<workspace ID>/state.vscdb

对于上下文,全局

settings.json
文件位置是

<vsc user profile folder>/user-data/User/settings.json

而且似乎确实不存储扩展列表或状态;只是他们的喜好。


2
投票

@gino-mempin之前的 SO 答案描述了如何使用 SQLite 浏览器

查询包含扩展状态的 
state.vscdb 文件中的 SQLite 表。要使用 PowerShell 以编程方式查询 vscdb
,请参阅下面的说明或
我关于查询 cookie 的其他 SO 答案

回想一下,

操作系统的全局settings.json

文件位置

    Windows
  • %APPDATA%\Code\User\settings.json
    $env:APPDATA\Code\User\settings.json
    
    
  • macOS
  • $HOME/Library/Application\ Support/Code/User/settings.json
    
    
  • Linux
  • $HOME/.config/Code/User/settings.json
    
    
我在

*

 之后使用星号 
Code
 来解释 Insiders 版本可能的 
Code - Insiders
 构造(如果您位于 
Insiders 频道)。对于全局设置,相对于 settings.json
state.vscdb
 位于 
./User/globalStorage/state.vscdb

Resolve-Path "$env:APPDATA\Code*\User\globalStorage\state.vscdb" # global settings store for extensions
对于工作区特定设置,同样相对于 

settings.json

,每个工作区 
state.vscdb
 存储在 
./User/workspaceStorage/<ExtensionContext.storageUri>/state.vscdb

再次以 Windows 中的 PowerShell 为例:

Resolve-Path "$env:APPDATA\Code*\User\workspaceStorage\*\state.vscdb" # workspace settings store for extensions

ExtensionContext.storageUri

指的是工作区特定目录的uri,扩展可以在其中存储私有状态。这可以使用
开发人员工具(帮助>切换开发人员工具)找到

Toggle Developer Tools in the Help menu

然后,在控制台中输入

let config = await vscode.context.resolveConfiguration(); config.workspace;
以下是此过程的屏幕录制:

请参阅

VS Code API 文档,了解有关扩展开发上下文中 ExtensionContext.storageUri

 的更多信息。

查询中

vscdb

这是我们如何使用 PowerShell 查询

vscdb

 的简单示例:

<# Prepare a convenience class to store our query results #> # Not strictly necessary, but it simplifies the query loop class VscWorkspaceSettings { [string]$Workspace [System.Collections.Generic.Dictionary[string,byte[]]]$ItemTable = [System.Collections.Generic.Dictionary[string,byte[]]]::new() VscWorkspaceSettings([string]$workspace,[Object[]]$itemTable){ $this.Workspace = $workspace foreach($item in $itemTable | Where-Object { $null -ne $_.key -and $null -ne $_.value -and $_.key -is [string] -and $_.value -is [byte[]] }){ $this.ItemTable.Add($item.key, $item.value) } } } <# Loop through all the workspaces #> $vscdbPaths = Resolve-Path "$env:APPDATA\Code*\User\workspaceStorage\*\state.vscdb" | Select-Object -ExpandProperty Path # Will loop through these $workspaceSettings=@{} # Will store all the settings foreach($vscdbPath in $vcsdbPaths){ $itemTable = Invoke-MySQLiteQuery -Path $vscdbPath -Query "SELECT * FROM ItemTable" -Verbose $settings = [VscWorkspaceSettings]::new(($vscdbPath -replace '.*?workspaceStorage\\([^\\]*)\\.*', '$1'),$itemTable) $workspaceSettings.Add($settings.Workspace,$settings) } # Results $workspaceSettings | Format-Table -AutoSize -Wrap # Single workspace (the last one from the loop) $workspaceSettings[$settings.Workspace] | Format-Table -AutoSize -Wrap
这些是结果:

命令结果
$workspaceSettings | Format-Table -AutoSize -Wrap

All workspaces
$workspaceSettings[$settings.Workspace] | Format-Table -AutoSize -Wrap

Example settings for one workspace
© www.soinside.com 2019 - 2024. All rights reserved.