如何离线安装VSCode扩展?

时间:2016-05-06 11:35:51

标签: visual-studio-code

我已在未连接且无法连接到互联网的计算机上安装了VS Code。 According to the docs,如果我有.vsix,我可以从命令行安装扩展程序,但我不知道如何从市场中获取.vsix

如何为the marketplace上托管的扩展程序下载.vsix

13 个答案:

答案 0 :(得分:160)

更新2017-12-13

您现在可以直接从marketplace

下载扩展程序

enter image description here

从VSCode 1.7.1开始,拖动或打开扩展程序不再起作用。要手动安装,您需要:

  • 打开扩展程序侧栏
  • 点击右上角的省略号
  • 选择从VSIX安装

Install from VSIX...

旧方法

根据documentation,可以直接下载扩展程序:

  

扩展程序的直接下载网址格式为:

https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publisher}/extension/${extension name}/${version}/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage

这意味着要下载您需要知道的扩展程序

  • 发布商名称
  • 版本
  • 扩展名

您可以在网址中找到所有这些信息。

实施例

以下是下载安装C# v1.3.0扩展程序的示例:

发布商,扩展程序和版本

您可以在其网址的扩展程序主页上找到发布商和扩展名:

  

https://marketplace.visualstudio.com/items?itemName= MS-vscode 即可。的 CSHARP

此处发布商为ms-vscode,扩展名为csharp

该版本可以在更多信息区域的右侧找到。

要下载它,您需要从上面的模板创建一个链接:

  

https://ms-vscode.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vscode/extension/csharp/1.3.0/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage

所有软件包都具有相同的名称​​ Microsoft.VisualStudio.Services.VSIXPackage ,因此如果您想知道以后的软件包,则需要在下载后重命名。

安装

要安装扩展程序

  • 重命名该文件并为其指定*.vsix分机号
  • 打开VS Code,转到File > Open File...Ctrl+O并选择.vsix文件
  • 如果一切顺利,您应该会在窗口顶部看到此消息:
  

扩展已成功安装。重新启动以启用它。

答案 1 :(得分:19)

添加到t3chb0t的答案,不知道为什么下载选项不可见,所以为使用GreaseMonkey / TamperMonkey的人创建了一个补丁:你可以找到要点代码here

或者您只需在浏览器控制台中粘贴以下行,就会神奇地显示链接:

let version = document.querySelector('.ux-table-metadata > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2) > div:nth-child(1)').innerText
    , itemDetails = window.location.search.replace('?', '').split('&').filter(str => !str.indexOf('itemName')).map(str => str.split('=')[1])[0]
    , [author, extension] = itemDetails.split('.')
    , lAuthor = author.toLowerCase()
    , href = `https://${lAuthor}.gallery.vsassets.io:443/_apis/public/gallery/publisher/${author}/extension/${extension}/${version}/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage`
    , element = document.createElement('a');


element.href = href;
element.className = 'vscode-moreinformation dark';
element.innerHTML = 'download .vsix file';
element.download  = `${extension}.${version}.vsix`;
document.querySelector('.vscode-install-info-container').appendChild(element);

答案 2 :(得分:14)

所有这些建议都很棒,但是因为执行代码来构建URL或手工构建那个疯狂的URL有点令人讨厌,所以有点痛苦......

所以,我把一个快速的网络应用程序放在一起,以使事情变得更容易。只需粘贴您想要的扩展程序的网址,即可下载已正确命名的扩展程序:publisher-extension-version.vsix。

希望有人发现它有用: http://vscode-offline.herokuapp.com/

答案 3 :(得分:4)

截至今天,扩展程序的最新版本的下载网址逐字嵌入到Marketplace的页面源中,例如: URL来源:

https://marketplace.visualstudio.com/items?itemName=lukasz-wronski.ftp-sync

包含字符串:

https://lukasz-wronski.gallerycdn.vsassets.io/extensions/lukasz-wronski/ftp-sync/0.3.3/1492669004156/Microsoft.VisualStudio.Services.VSIXPackage

我使用以下Python regexp来提取dl URL:

urlre = re.search(r'source.+(http.+Microsoft\.VisualStudio\.Services\.VSIXPackage)', content)
if urlre:
    return urlre.group(1)

答案 4 :(得分:3)

我想抛出一个PowerShell下载选项,以防其他人遇到此问题。我有几个离线方案,我在循环中运行它来下载和更新我离线使用的所有扩展。

$page = Invoke-WebRequest -Uri 'https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell'

$details = ( $page.Scripts | ? {$_.class -eq 'vss-extension'}).innerHTML | Convertfrom-Json

$extensionName = $details.extensionName 
$publisher     = $details.publisher.publisherName
$version       = $details.versions.version

Invoke-WebRequest -uri "$($details.versions.fallbackAssetUri)/Microsoft.VisualStudio.Services.VSIXPackage" `
                  -OutFile "C:\Scripts\extensions\$publisher.$extensionName.$version.VSIX"

答案 5 :(得分:2)

添加到t3chb0t的优秀答案 - 使用这些PowerShell命令在文件夹中安装所有VSCode扩展:

cd C:\PathToFolderWithManyDownloadedExtensionFiles
Get-ChildItem . -Filter *.vsix | ForEach-Object { code --install-extension $_.FullName }

然后,重新加载VSCode以完成安装。

答案 6 :(得分:1)

现在您可以直接在"资源"部分,有"下载扩展名"链接,我希望这些信息仍然有用。

答案 7 :(得分:1)

我将要点存储在脚本中,以便使用PowerShell脚本从市场下载扩展。 随时发表评论以分享它。

https://gist.github.com/azurekid/ca641c47981cf8074aeaf6218bb9eb58

[CmdletBinding()]
param
(
    [Parameter(Mandatory = $true)]
    [string] $Publisher,

    [Parameter(Mandatory = $true)]
    [string] $ExtensionName,

    [Parameter(Mandatory = $true)]
    [ValidateScript( {
            If ($_ -match "^([0-9].[0-9].[0-9])") {
                $True
            }
            else {
                Throw "$_ is not a valid version number. Version can only contain digits"
            }
        })]
    [string] $Version,

    [Parameter(Mandatory = $true)]
    [string] $OutputLocation
)

Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"

Write-Output "Publisher:        $($Publisher)"
Write-Output "Extension name:   $($ExtensionName)"
Write-Output "Version:          $($Version)"
Write-Output "Output location   $($OutputLocation)"

$baseUrl = "https://$($Publisher).gallery.vsassets.io/_apis/public/gallery/publisher/$($Publisher)/extension/$($ExtensionName)/$($Version)/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage"
$outputFile = "$($Publisher)-$($ExtensionName)-$($Version).visx"

if (Test-Path $OutputLocation) {
    try {
        Write-Output "Retrieving extension..."
        [uri]::EscapeUriString($baseUrl) | Out-Null
        Invoke-WebRequest -Uri $baseUrl -OutFile "$OutputLocation\$outputFile"
    }
    catch {
        Write-Error "Unable to find the extension in the marketplace"
    }
}
else {
    Write-Output "The Path $($OutputLocation) does not exist"
}

答案 8 :(得分:0)

对于Python用户,用于enter image description here的出色答案的模式如下:

https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/python/{version_number}/vspackage

请确保向右滚动以查看必须输入版本号的地方。

答案 9 :(得分:0)

如果您正在寻找脚本化的解决方案:

  1. 获取二进制下载URL:可以使用API​​,但请注意没有任何文档。该API可以返回URL以下载.vsix个文件(请参见下面的示例)
  2. 下载二进制文件
  3. 小心地将二进制文件unzip ~/.vscode/extensions/中:您需要修改解压缩的目录名,删除一个文件并移动/重命名另一个文件。

有关API的信息,请看以下示例,有关如何将请求头修改为https://github.com/Microsoft/vscode/blob/master/src/vs/platform/extensionManagement/node/extensionGalleryService.ts的提示。

POST https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery?api-version=5.1-preview HTTP/1.1
content-type: application/json

{
    "filters": [
        {
        "criteria": [
            {
                "filterType": 8,
                "value": "Microsoft.VisualStudio.Code",
            },
            {
                "filterType": 7,
                "value": "ms-python.python",
            }
        ],
        "pageNumber": 1,
        "pageSize": 10,
        "sortBy": 0,
        "sortOrder": 0,
        }
    ],
    "assetTypes": ["Microsoft.VisualStudio.Services.VSIXPackage"],
    "flags": 514,
}

上述示例的说明:

  • "filterType": 8-FilterType.Target more FilterTypes
  • "filterType": 7-FilterType.ExtensionName more FilterTypes
  • "flags": 514-0x2 | 0x200-Flags.IncludeFiles | Flags.IncludeLatestVersionOnly-more Flags
    • 要获取标志十进制值,您可以运行python -c "print(0x2|0x200)"
  • "assetTypes": ["Microsoft.VisualStudio.Services.VSIXPackage"]-仅获得指向.vsix文件more AssetTypes
  • 的链接

答案 10 :(得分:0)

如果您的离线实例上具有特定的(旧版)VSCode版本,则可能无法正确集成最新的扩展。

要确保VSCode和扩展一起使用,必须将它们全部一起安装在在线计算机上。这样可以解决所有依赖性(具有特定版本),并确保脱机实例的准确配置。

快速步骤:

安装VSCode版本,关闭更新,然后安装扩展。从安装位置复制扩展并将其放在目标计算机上。

详细步骤:

在联机计算机上安装VSCode的确切版本。然后转到File -> Preferences -> Settings关闭更新。在Settings窗口的User Settings -> Application下,转到Update部分,并将Channel的参数更改为none。这样可以防止VSCode接触到Internet并自动将您的版本更新为最新版本。

然后转到VSCode扩展部分,并安装所有需要的扩展。将已安装的扩展程序从其安装位置(带有Windows的C:\Users\<username>\.vscode\extensions)复制到目标计算机上的同一位置。

完美运行。

答案 11 :(得分:0)

一个小的powershell可以为Visual Studio扩展获取所需的信息:

>Get-VSMarketPlaceExtension "ProBITools.MicrosoftReportProjectsforVisualStudio"


displayName    : Microsoft Reporting Services Projects
extensionId    : 85e42f76-6afa-4a68-afb5-033d1fe08d7b
deploymentType : vsix
version        : 2.6.7
LastUpdate     : 13/05/2020 22:23:45
IsValidated    : True
extensionName  : MicrosoftReportProjectsforVisualStudio
publisher      : ProBITools
SourceURL      : https://probitools.gallery.vsassets.io/_apis/public/gallery/publisher/ProBITools/extension/MicrosoftReportProjectsforVisualStudio/2.6.7/assetbyname/Microsoft.DataTools.ReportingServices.vsix
FileName       : Microsoft.DataTools.ReportingServices.vsix

此功能使用市场API获取扩展信息。 用法和结果示例:

ClientEncryption -> createDataKey(...)

所有标志值均可用here

感谢m4js7er和Adam Haynes的启发

答案 12 :(得分:0)

确实让我感到困惑的是,Marketplace 网页上没有提供直接的 curl 友好 URL 来下载 vscode 扩展!我需要它来填充 CICD 管道中的容器。

我发现@t3chb0t 和@LetMeSOThat4U 的答案在这里非常有用。另外,我发现:

  1. 实际的包要么命名为 vspackage,要么命名为 Microsoft.VisualStudio.Services.VSIXPackage(还有其他的吗?)。有一个标签 VsixManifestAssetType 我认为可以用来获取类型:"VsixManifestAssetType":"Microsoft.VisualStudio.Services.VsixManifest"

  2. 这些工件是 tar 文件。所以如果你有下载vspackage,看到内容:tar vtf vspackage

  3. 现在据说,扩展 jupyter 应该有 .vsix 后缀,但这些包都没有以 .vsix 命名。所以我认为下载后,必须相应地将包重命名为 .vsix。使用 jupyter 版本 2021.7.0,我会将 vspackage 重命名为:vsx-jupyter-2021.7.0.vsix

  4. 在 Linux/Ubuntu 上:我可以使用以下命令来安装它:$ code-server --install-extensions vsx-jupyter-2021.7.0.vsix。之后,可以使用:code-server --list-extensions 进行验证。

  5. 要获取包 ms-python 的 URL,请遵循 @LetMeSOThat4U 方法:

一个。使用 Chrome 浏览器或 curl/wget 获取页面 https://marketplace.visualstudio.com/items?itemName=ms-python.python

B.右键单击鼠标选择查看页面源并搜索字符串:“AssetUri”:您将看到 "AssetUri":"https://ms-python.gallerycdn.vsassets.io/extensions/ms-python/python/2021.6.944021595/1623882641726"

c.现在尝试附加 vspackage 或 Microsoft.VisualStudio.Services.VSIXPackage 并查看哪个有效。在这种情况下,它是后者,来自 VsixManifestAssetType。所以实际的 CLI 使用 curl: $ curl -o vsx-ms-python-2021.6.vsix --insecure https://ms-python.gallerycdn.vsassets.io/extensions/ms-python/python/2021.6.944021595/1623882641726/Microsoft.VisualStudio.Services.VSIXPackage

$ tar vtf vsx-ms-python-2021.6.vsix # 显示文件内容