Comment puis-je installer les extensions Visual Studio Code hors connexion?

130

J'ai installé Visual Studio Code sur un ordinateur qui n'est pas et ne peut pas être connecté à Internet. Selon la documentation , je peux installer une extension à partir de la ligne de commande si j'ai le .vsix, mais je ne sais pas comment obtenir le .vsixsur le marché.

Comment puis-je télécharger le .vsixpour une extension hébergée sur la place de marché ?

blachniet
la source
Utilisez download-vsix pour télécharger le vsix. ie) rajasimon.github.io/…
Raja Simon

Réponses:

202

MISE À JOUR 13/12/2017

Vous pouvez maintenant télécharger l'extension directement depuis la place de marché .

Entrez la description de l'image ici

Depuis Visual Studio Code 1.7.1, glisser ou ouvrir l'extension ne fonctionne plus. Pour l'installer manuellement, vous devez:

  • ouvrir la barre latérale des extensions
  • cliquez sur les points de suspension dans le coin supérieur droit
  • choisissez Installer à partir de VSIX

Installer à partir de VSIX ...


Ancienne méthode

Selon la documentation, il est possible de télécharger directement une extension:

L'URL de téléchargement direct d'une extension se présente sous la forme:

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

Cela signifie que pour télécharger l'extension, vous devez connaître

  • le nom de l'éditeur
  • la version
  • le nom de l'extension

Vous pouvez trouver toutes ces informations dans l'URL.

Exemple

Voici un exemple de téléchargement d'une installation de l' extension C # v1.3.0 :

Éditeur, extension et version

Vous pouvez trouver l'éditeur et les noms des extensions sur la page d'accueil de l'extension à l'intérieur de son URL:

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

Ici, l'éditeur est ms-vscodeet le nom de l'extension est csharp.

La version se trouve sur le côté droit dans la zone Plus d'infos .

Pour le télécharger, vous devez créer un lien à partir du modèle ci-dessus:

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

Tous les packages porteront le même nom Microsoft.VisualStudio.Services.VSIXPackage , vous devrez donc le renommer après le téléchargement si vous voulez savoir de quel package il s'agissait plus tard.

Installation

Afin d'installer l'extension

  • Renommez le fichier et donnez-lui l' *.vsixextension
  • Ouvrez Visual Studio Code, allez dans le menu FichierOuvrir un fichier ... ou Ctrl+ Oet sélectionnez le .vsixfichier
  • Si tout s'est bien passé, vous devriez voir ce message en haut de la fenêtre:

L'extension a été installée avec succès. Redémarrez pour l'activer.

t3chb0t
la source
10
J'ai créé un bookmarklet à utiliser sur la page d'extension. Voyons combien de temps ça marche!: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
L'étape d'installation n'a pas fonctionné pour moi, dans VS Code 1.7.1 (octobre 2016).
Roy Dictus
@RoyDictus ideed, VSCode affiche le lien vers les extensions au lieu de l'installer: - | ils doivent avoir changé quelque chose.
t3chb0t
@RoyDictus voir la mise à jour - cela devrait fonctionner pour vous. Je joindrai des captures d'écran une autre fois.
t3chb0t
2
Cette réponse contient de bonnes informations; cependant, C # est un mauvais exemple, d'autant plus que la question indique "une machine qui n'est pas, et ne peut pas être, connectée à Internet" . L'extension C # ne peut pas être installée hors connexion comme décrit ici, car elle tente de télécharger des composants spécifiques à la plate-forme après l'activation, et à la place, un package hors connexion spécifique doit être généré .
Herohtar
19

en ajoutant à la réponse de t3chb0t, je ne sais pas pourquoi l'option de téléchargement n'est pas visible, alors créé un correctif pour ceux qui utilisent GreaseMonkey / TamperMonkey: vous pouvez trouver le code essentiel ici

Ou vous pouvez simplement coller les lignes ci-dessous dans la console de votre navigateur, et le lien apparaîtrait comme par magie:

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
la source
Bien mais redondant car VSCode fournit maintenant le lien sur leur site Web
Blowsie
1
@Blowsie pas systématiquement, sur Windows je vois le lien, sur Linux je ne le fais pas
kbolino
15

Toutes ces suggestions sont excellentes, mais un peu pénibles à suivre car exécuter le code pour construire l'URL ou construire cette URL folle à la main est un peu ennuyeux ...

J'ai donc créé une application Web rapide pour faciliter les choses. Collez simplement l'URL de l'extension que vous souhaitez et sortira le téléchargement de votre extension déjà correctement nommée: publisher-extension-version.vsix.

J'espère que quelqu'un le trouvera utile: http://vscode-offline.herokuapp.com/

Yaakov Chaikin
la source
Bien mais redondant car VSCode fournit maintenant le lien sur leur site Web
Blowsie
Correct. C'est un ajout très récent de leur part. Je retirerai probablement mon service dans un proche avenir.
Yaakov Chaikin
@YaakovChaikin le lien ne s'affiche pas toujours, mais votre service fonctionne de manière cohérente
kbolino
C'est cool. Malheureusement, lorsque d'autres ont fait des choses similaires sur les pages GitHub au lieu de Heroku, des utilisateurs comme ChrisF les ont supprimés en disant "ne pas créer de lien vers votre GitHub". C'est triste quand les modérateurs deviennent des intimidateurs.
iconoclaste le
4

À partir d'aujourd'hui, l'URL de téléchargement de la dernière version de l'extension est intégrée textuellement dans la source de la page sur Marketplace, par exemple source à l'URL:

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

contient une chaîne:

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

J'utilise l'expression rationnelle Python suivante pour extraire l'URL dl:

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

Je voulais lancer une option de téléchargement PowerShell sur la pile au cas où quelqu'un d'autre rencontrerait cela. J'ai plusieurs scénarios hors ligne et je l'exécute en boucle pour télécharger et mettre à jour toutes les extensions que j'utilise hors ligne.

$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
la source
2

Ajout à l'excellente réponse de t3chb0t - Utilisez ces commandes PowerShell pour installer toutes les extensions VSCode dans un dossier:

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

Ensuite, rechargez VSCode pour terminer l'installation.

Oren Chapo
la source
1

Vous pouvez maintenant télécharger une extension directement dans la section "Ressources", il y a un lien "Télécharger l'extension", j'espère que cette information est toujours utile.

Luis
la source
1

J'ai stocké un script dans mon résumé pour télécharger une extension à partir du marché à l'aide d'un script PowerShell. N'hésitez pas à commenter ou à partager.

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
la source
0

Pour les utilisateurs de Python, le modèle à utiliser avec l'excellente réponse de t3chbot ressemble à ceci :

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

assurez-vous de faire défiler vers la droite pour voir où vous devez entrer le numéro de version.

Petites tables Bobby
la source
0

Si vous recherchez une solution scriptée:

  1. Obtenir l'URL de téléchargement binaire: vous pouvez utiliser une API, mais sachez qu'il n'y a pas de documentation pour cela. Cette API peut renvoyer une URL pour télécharger des .vsixfichiers (voir l'exemple ci-dessous)
  2. Téléchargez le binaire
  3. Soigneusement unziple binaire dans ~/.vscode/extensions/: vous devez modifier le nom du répertoire décompressé, supprimer un fichier et déplacer / renommer un autre.

Pour l'API, commencez par regarder l'exemple suivant et pour obtenir des conseils sur la modification de la requête, accédez à 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,
}

Explications de l'exemple ci-dessus:

  • "filterType": 8- FilterType.Target plus de FilterTypes
  • "filterType": 7- FilterType.ExtensionName plus de FilterTypes
  • "flags": 514- 0x2 | 0x200- Flags.IncludeFiles | Flags.IncludeLatestVersionOnly- plus de drapeaux
    • pour obtenir la valeur décimale du drapeau, vous pouvez exécuter python -c "print(0x2|0x200)"
  • "assetTypes": ["Microsoft.VisualStudio.Services.VSIXPackage"]- pour obtenir uniquement le lien vers un .vsixfichier plus AssetTypes
m4js7er
la source
0

Si vous avez une version spécifique (héritée) de VSCode sur votre instance hors ligne, l'extraction des dernières extensions peut ne pas s'intégrer correctement.

Pour vous assurer que VSCode et les extensions fonctionnent ensemble, ils doivent tous être installés ensemble sur la machine en ligne. Cela résout toutes les dépendances (avec des versions spécifiques) et garantit la configuration exacte de l'instance hors ligne.

Étapes rapides:

Installez la version VSCode, désactivez la mise à jour et installez les extensions. Copiez les extensions à partir de l'emplacement d'installation et placez-les sur la machine cible.

Etapes détaillées:

Installez la version exacte de VSCode sur la machine en ligne. Désactivez ensuite les mises à jour en accédant à File -> Preferences -> Settings. Dans la Settingsfenêtre, sous User Settings -> Application, accédez à la Updatesection et modifiez le paramètre pour Channelen none. Cela empêche VSCode d'accéder à Internet et de mettre à jour automatiquement vos versions à la dernière.

Ensuite, allez dans la section Extensions VSCode et installez toutes les extensions souhaitées. Copiez les extensions installées depuis leur emplacement d'installation (avec windows its C:\Users\<username>\.vscode\extensions) vers le même emplacement sur la machine cible.

Fonctionne parfaitement.

petah
la source