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

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ú ArchivoAbrir 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.

t3chb0t
fuente
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);
mido
fuente
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/

Yaakov Chaikin
fuente
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)
LetMeSOThat4U
fuente
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"
Adam Haynes
fuente
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.

Oren Chapo
fuente
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.

Luis
fuente
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"
}
Azurekid
fuente
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.

Mesitas Bobby
fuente
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
m4js7er
fuente
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.

petah
fuente