¿Cómo puedo instalar extensiones de Visual Studio Code sin conexión?


130

He instalado Visual Studio Code en una máquina que no está, y no puede estar, conectada a Internet. De acuerdo con la documentación , puedo instalar una extensión desde la línea de comandos si tengo la .vsix, pero no sé cómo obtenerla .vsixdel mercado.

¿Cómo puedo descargar .vsixuna extensión alojada en el mercado ?


Use download-vsix descargue el vsix. es decir) rajasimon.github.io/…
— Raja Simon

Respuestas:


202

ACTUALIZACIÓN 2017-12-13

Ahora puede descargar la extensión directamente desde el mercado .

Ingrese la descripción de la imagen aquí

A partir de Visual Studio Code 1.7.1, arrastrar o abrir la extensión ya no funciona. Para instalarlo manualmente necesita:

  • abre la barra lateral de extensiones
  • haga clic en los puntos suspensivos en la esquina superior derecha
  • elija Instalar desde VSIX

Instalar desde VSIX ...


Método antiguo

Según la documentación , es posible descargar una extensión directamente:

La URL de descarga directa de una extensión tiene el formato:

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

Esto significa que para descargar la extensión necesita saber

  • el nombre del editor
  • la versión
  • el nombre de la extensión

Puede encontrar toda esta información en la URL.

Ejemplo

Aquí hay un ejemplo para descargar e instalar la extensión C # v1.3.0 :

Editor, extensión y versión

Puede encontrar el editor y los nombres de las extensiones en la página de inicio de la extensión dentro de su URL:

https://marketplace.visualstudio.com/items?itemName= ms-vscode . csharp

Aquí está el editor ms-vscodey el nombre de la extensión es csharp.

La versión se puede encontrar en el lado derecho en el área Más información .

Para descargarlo, debe crear un enlace desde la plantilla anterior:

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

Todos los paquetes tendrán el mismo nombre Microsoft.VisualStudio.Services.VSIXPackage , por lo que deberá cambiarle el nombre después de la descarga si desea saber qué paquete era más tarde.

Instalación

Para instalar la extensión

  • Cambia el nombre del archivo y dale la *.vsixextensión
  • Abra Visual Studio Code, vaya al menú Archivo → Abrir archivo ... o Ctrl+ Oy seleccione el .vsixarchivo
  • Si todo salió bien, debería ver este mensaje en la parte superior de la ventana:

La extensión se instaló correctamente. Reinicie para habilitarlo.


10
Hice un marcador para usar en la página de extensión. ¡Veamos cuánto tiempo permanece funcionando !javascript:(function() {var ver = document.querySelector("[data-bind='text: version']").innerText; var pub = window.location.href.replace(/.*itemName=(.*?)\.(.*)/,"$1"); var name = window.location.href.replace(/.*itemName=(.*?)\.(.*)/,"$2"); window.location = "https://" + pub + ".gallery.vsassets.io/_apis/public/gallery/publisher/" + pub + "/extension/" + name + "/" + ver + "/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage";})()
— TheQuickBrownFox

El paso de instalación no funcionó para mí, en VS Code 1.7.1 (octubre de 2016).
— Roy Dictus

@RoyDictus ideado, VSCode muestra el enlace a las extensiones en lugar de instalarlo: - | deben haber cambiado algo.
— t3chb0t

@RoyDictus ve la actualización: esto debería funcionar para usted. Adjuntaré capturas de pantalla en otro momento.
— t3chb0t

2
Esta respuesta tiene buena información; sin embargo, C # es un mal ejemplo, especialmente porque la pregunta establece "una máquina que no está conectada a Internet y no puede estar conectada a ella" . La extensión C # no se puede instalar fuera de línea como se describe aquí porque intenta descargar componentes específicos de la plataforma después de la activación, y en su lugar se debe construir un paquete fuera de línea específico .
— Herohtar

19

agregando a la respuesta de t3chb0t, no estoy seguro de por qué la opción de descarga no es visible, por lo que creó un parche para aquellos que usan GreaseMonkey / TamperMonkey: puede encontrar el código esencial aquí

O simplemente puede pegar las siguientes líneas en la consola de su navegador, y el enlace aparecerá mágicamente:

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);

Agradable pero redundante ya que VSCode ahora proporciona el enlace en su sitio web
— Blowsie

1
@Blowsie no consistentemente, en Windows veo el enlace, en Linux no lo
— veo

15

Todas estas sugerencias son geniales, pero un poco dolorosas de seguir porque ejecutar el código para construir la URL o construir esa URL loca a mano es un poco molesto ...

Entonces, creé una aplicación web rápida para facilitar las cosas. Simplemente pegue la URL de la extensión que desea y sale la descarga de su extensión que ya se llama correctamente: publisher-extension-version.vsix.

Espero que alguien lo encuentre útil: http://vscode-offline.herokuapp.com/


Agradable pero redundante ya que VSCode ahora proporciona el enlace en su sitio web
— Blowsie

Correcto. Esa es una adición muy reciente de su parte. Probablemente retiraré mi servicio en el futuro cercano.
— Yaakov Chaikin

@YaakovChaikin el enlace no siempre aparece, pero su servicio funciona de manera constante
— kbolino

Esto es genial Desafortunadamente, cuando otros hicieron cosas similares en las páginas de GitHub en lugar de Heroku, los usuarios como ChrisF los eliminaron diciendo "no se vinculen a su GitHub". Es triste cuando los moderadores se convierten en matones.
— iconoclasta

4

A partir de hoy, la URL de descarga de la última versión de la extensión está incrustada literalmente en la fuente de la página en Marketplace, por ejemplo, en la URL:

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

contiene cadena:

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

Utilizo la siguiente expresión regular de Python para extraer la URL dl:

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

3

Quería lanzar una opción de descarga de PowerShell en la pila en caso de que alguien más se encuentre con esto. Tengo varios escenarios sin conexión y ejecuto esto en un bucle para descargar y actualizar todas las extensiones que uso sin conexión.

$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"

2

Agregando a la excelente respuesta de t3chb0t: use estos comandos de PowerShell para instalar todas las extensiones VSCode en una carpeta:

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

Luego, vuelva a cargar VSCode para completar la instalación.


1

Ahora puede descargar una extensión directamente en la sección "Recursos", hay un enlace "Descargar extensión", espero que esta información siga siendo útil.


1

He almacenado un script en mi esencia para descargar una extensión del mercado usando un script de PowerShell. Siéntase libre de comentar o compartirlo.

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"
}

0

Para los usuarios de Python, el patrón a utilizar con la excelente respuesta de t3chbot es el siguiente:

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

asegúrese de desplazarse hacia la derecha para ver dónde debe ingresar el número de versión.


0

Si está buscando una solución con script:

  1. Obtener URL de descarga binaria: puede usar una API, pero tenga en cuenta que no hay documentación para ello. Esta API puede devolver una URL para descargar .vsixarchivos (ver ejemplo a continuación)
  2. Descargar el binario
  3. Cuidadosamente unzipel binario en ~/.vscode/extensions/: necesita modificar el nombre del directorio descomprimido, eliminar un archivo y mover / renombrar otro.

Para API, comience mirando el siguiente ejemplo y para obtener sugerencias sobre cómo modificar la solicitud, diríjase a 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,
}

Explicaciones al ejemplo anterior:

  • "filterType": 8- FilterType.Target más tipos de filtro
  • "filterType": 7- FilterType.ExtensionName más tipos de filtro
  • "flags": 514- 0x2 | 0x200- Flags.IncludeFiles | Flags.IncludeLatestVersionOnly- más Banderas
    • para obtener el valor decimal de la bandera puede ejecutar python -c "print(0x2|0x200)"
  • "assetTypes": ["Microsoft.VisualStudio.Services.VSIXPackage"]- para obtener solo un enlace para .vsixarchivar más AssetTypes

0

Si tiene una versión específica (heredada) de VSCode en su instancia fuera de línea, puede que las extensiones más recientes no se integren correctamente.

Para asegurarse de que VSCode y las extensiones funcionen juntas, todas deben instalarse juntas en la máquina en línea. Esto resuelve cualquier dependencia (con versiones específicas) y asegura la configuración exacta de la instancia fuera de línea.

Pasos rápidos:

Instale la versión VSCode, desactive la actualización e instale las extensiones. Copie las extensiones de la ubicación instalada y colóquelas en la máquina de destino.

Pasos detallados:

Instale la versión exacta de VSCode en la máquina en línea. Luego apague las actualizaciones yendo a File -> Preferences -> Settings. En la Settingsventana, debajo User Settings -> Application, vaya a la Updatesección y cambie el parámetro para Channela none. Esto evita que VSCode llegue a Internet y actualice automáticamente sus versiones a la última.

Luego vaya a la sección Extensiones VSCode e instale todas las extensiones deseadas. Copie las extensiones instaladas desde su ubicación de instalación (con Windows C:\Users\<username>\.vscode\extensions) a la misma ubicación en la máquina de destino.

Funciona perfectamente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.