Wie kann ich Visual Studio Code-Erweiterungen offline installieren?

130

Ich habe Visual Studio Code auf einem Computer installiert, der nicht mit dem Internet verbunden ist und nicht verbunden werden kann. Laut Dokumentation kann ich eine Erweiterung über die Befehlszeile installieren, wenn ich die habe .vsix, aber ich weiß nicht, wie ich sie .vsixvom Markt bekommen kann.

Wie kann ich die .vsixfür eine auf dem Marktplatz gehostete Erweiterung herunterladen ?

blachniet
quelle
Verwenden Sie download-vsix. Laden Sie das vsix herunter. dh) rajasimon.github.io/…
Raja Simon

Antworten:

202

UPDATE 2017-12-13

Sie können die Erweiterung jetzt direkt vom Marktplatz herunterladen .

Geben Sie hier die Bildbeschreibung ein

Ab Visual Studio Code 1.7.1 funktioniert das Ziehen oder Öffnen der Erweiterung nicht mehr. Um es manuell zu installieren, müssen Sie:

  • Öffnen Sie die Seitenleiste der Erweiterungen
  • Klicken Sie auf die Auslassungspunkte in der rechten oberen Ecke
  • Wählen Sie Von VSIX installieren

Von VSIX installieren ...


Alte Methode

Laut Dokumentation ist es möglich, eine Erweiterung direkt herunterzuladen:

Die direkte Download-URL einer Erweiterung hat folgende Form:

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

Dies bedeutet, dass Sie zum Herunterladen der Erweiterung wissen müssen

  • der Name des Herausgebers
  • die Version
  • der Name der Erweiterung

Sie finden alle diese Informationen in der URL.

Beispiel

Hier ist ein Beispiel für das Herunterladen und Installieren der Erweiterung C # v1.3.0 :

Herausgeber, Erweiterung und Version

Sie finden den Herausgeber und die Namen der Nebenstellen auf der Homepage der Nebenstelle unter ihrer URL:

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

Hier ist der Herausgeber ms-vscodeund der Name der Erweiterung csharp.

Die Version finden Sie auf der rechten Seite im Bereich Weitere Informationen .

Um es herunterzuladen, müssen Sie einen Link aus der obigen Vorlage erstellen:

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

Alle Pakete haben den gleichen Namen Microsoft.VisualStudio.Services.VSIXPackage . Sie müssen es daher nach dem Herunterladen umbenennen, wenn Sie später wissen möchten, um welches Paket es sich handelt.

Installation

Um die Erweiterung zu installieren

  • Benennen Sie die Datei um und geben Sie ihr die *.vsixErweiterung
  • Öffnen Sie Visual Studio Code, gehen Sie zum Menü DateiDatei öffnen ... oder Ctrl+ Ound wählen Sie die .vsixDatei aus
  • Wenn alles gut gegangen ist, sollte diese Meldung oben im Fenster angezeigt werden:

Die Erweiterung wurde erfolgreich installiert. Starten Sie neu, um es zu aktivieren.

t3chb0t
quelle
10
Ich habe ein Lesezeichen für die Erweiterungsseite erstellt. Mal sehen, wie lange es funktioniert 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";})()
!:
Der Installationsschritt hat bei mir in VS Code 1.7.1 (Oktober 2016) nicht funktioniert.
Roy Dictus
@RoyDictus ideed, VSCode zeigt den Link zu den Erweiterungen an, anstatt ihn zu installieren: - | sie müssen etwas verändert haben.
t3chb0t
@ RoyDictus siehe das Update - das sollte für Sie funktionieren. Ich werde ein anderes Mal Screenshots anhängen.
t3chb0t
2
Diese Antwort enthält gute Informationen. C # ist jedoch ein schlechtes Beispiel, zumal die Frage lautet "eine Maschine, die nicht mit dem Internet verbunden ist und nicht verbunden werden kann" . Die C # -Erweiterung kann nicht wie hier beschrieben offline installiert werden, da nach der Aktivierung versucht wird, plattformspezifische Komponenten herunterzuladen. Stattdessen muss ein bestimmtes Offline-Paket erstellt werden .
Herohtar
19

Wenn Sie die Antwort von t3chb0t ergänzen und nicht sicher sind, warum die Option zum Herunterladen nicht sichtbar ist, haben Sie einen Patch für diejenigen erstellt, die GreaseMonkey / TamperMonkey verwenden: Den Hauptcode finden Sie hier

Oder Sie können einfach die folgenden Zeilen in Ihre Browserkonsole einfügen, und der Link wird auf magische Weise angezeigt:

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
quelle
Schön, aber überflüssig, da VSCode jetzt den Link auf ihrer Website
bereitstellt
1
@Blowsie nicht konsequent, unter Windows sehe ich den Link, unter Linux nicht
kbolino
15

All diese Vorschläge sind großartig, aber es ist schmerzhaft, ihnen zu folgen, da das Ausführen des Codes zum Erstellen der URL oder das Erstellen dieser verrückten URL von Hand etwas ärgerlich ist ...

Also habe ich eine schnelle Web-App zusammengestellt, um die Dinge einfacher zu machen. Fügen Sie einfach die URL der gewünschten Erweiterung ein und der Download Ihrer bereits richtig benannten Erweiterung wird veröffentlicht: publisher-extension-version.vsix.

Hoffe, jemand findet es hilfreich: http://vscode-offline.herokuapp.com/

Yaakov Chaikin
quelle
Schön, aber überflüssig, da VSCode jetzt den Link auf ihrer Website
bereitstellt
Richtig. Das ist eine sehr neue Ergänzung von ihrer Seite. Ich werde wahrscheinlich in naher Zukunft meinen Dienst einstellen.
Yaakov Chaikin
@YaakovChaikin der Link wird nicht immer angezeigt, aber Ihr Service funktioniert konsistent
kbolino
Das ist cool. Leider haben Benutzer wie ChrisF, wenn andere ähnliche Dinge auf GitHub-Seiten anstelle von Heroku getan haben, diese gelöscht und gesagt: "Verlinken Sie nicht mit Ihrem GitHub". Es ist traurig, wenn Moderatoren zu Mobbern werden.
Bilderstürmer
4

Ab heute ist die Download-URL für die neueste Version der Erweiterung wörtlich in die Quelle der Seite auf dem Marktplatz eingebettet, z. B. Quelle unter URL:

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

enthält Zeichenfolge:

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

Ich verwende folgenden Python-regulären Ausdruck, um die dl-URL zu extrahieren:

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

Ich wollte eine PowerShell-Download-Option auf den Stapel werfen, falls jemand anderes darauf stößt. Ich habe mehrere Offline-Szenarien und führe diese in einer Schleife aus, um alle Erweiterungen, die ich offline verwende, herunterzuladen und zu aktualisieren.

$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
quelle
2

Hinzufügen zur hervorragenden Antwort von t3chb0t - Verwenden Sie diese PowerShell-Befehle, um alle VSCode-Erweiterungen in einem Ordner zu installieren:

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

Laden Sie dann VSCode neu, um die Installation abzuschließen.

Oren Chapo
quelle
1

Jetzt können Sie eine Erweiterung direkt im Bereich "Ressourcen" herunterladen. Es gibt einen Link "Erweiterung herunterladen". Ich hoffe, diese Informationen sind weiterhin nützlich.

Luis
quelle
1

Ich habe ein Skript in meinem Kern gespeichert, um eine Erweiterung mithilfe eines PowerShell-Skripts vom Marktplatz herunterzuladen. Fühlen Sie sich frei zu kommentieren oder zu teilen.

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
quelle
0

Für Python-Benutzer sieht das Muster für die hervorragende Antwort von t3chbot folgendermaßen aus:

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

Scrollen Sie unbedingt nach rechts, um zu sehen, wo Sie die Versionsnummer eingeben müssen.

Kleine Bobby Tische
quelle
0

Wenn Sie nach einer Skriptlösung suchen:

  1. Holen Sie sich eine binäre Download-URL: Sie können eine API verwenden, aber seien Sie gewarnt, dass es keine Dokumentation dafür gibt. Diese API kann eine URL zum Herunterladen von .vsixDateien zurückgeben (siehe Beispiel unten).
  2. Laden Sie die Binärdatei herunter
  3. Vorsichtig unzipdie Binärdatei in ~/.vscode/extensions/: Sie müssen den entpackten Verzeichnisnamen ändern, eine Datei entfernen und eine andere verschieben / umbenennen.

Schauen Sie sich für die API zunächst das folgende Beispiel an und finden Sie Hinweise zum Ändern der Anforderung unter 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,
}

Erklärungen zum obigen Beispiel:

  • "filterType": 8- FilterType.Target mehr Filtertypen
  • "filterType": 7- FilterType.ExtensionName mehr Filtertypen
  • "flags": 514- 0x2 | 0x200- Flags.IncludeFiles | Flags.IncludeLatestVersionOnly- mehr Flaggen
    • Um den Flag-Dezimalwert zu erhalten, können Sie ausführen python -c "print(0x2|0x200)"
  • "assetTypes": ["Microsoft.VisualStudio.Services.VSIXPackage"]- um nur einen Link zu erhalten, .vsixum weitere AssetTypes abzulegen
m4js7er
quelle
0

Wenn Ihre Offline-Instanz eine bestimmte (ältere) Version von VSCode enthält, ist das Abrufen der neuesten Erweiterungen möglicherweise nicht ordnungsgemäß integriert.

Um sicherzustellen, dass VSCode und die Erweiterungen zusammenarbeiten, müssen sie alle zusammen auf dem Online-Computer installiert werden. Dadurch werden alle Abhängigkeiten (mit bestimmten Versionen) aufgelöst und die genaue Konfiguration der Offline-Instanz sichergestellt.

Schnelle Schritte:

Installieren Sie die VSCode-Version, deaktivieren Sie die Aktualisierung und installieren Sie die Erweiterungen. Kopieren Sie die Erweiterungen vom installierten Speicherort und platzieren Sie sie auf dem Zielcomputer.

Detaillierte Schritte:

Installieren Sie die genaue Version von VSCode auf dem Online-Computer. Deaktivieren Sie dann die Updates, indem Sie auf gehen File -> Preferences -> Settings. Gehen Sie im SettingsFenster unter User Settings -> Applicationzu UpdateAbschnitt und ändern Sie den Parameter für Channelinnone . Dies verhindert, dass VSCode auf das Internet zugreift und Ihre Versionen automatisch auf den neuesten Stand bringt.

Gehen Sie dann zum Abschnitt VSCode-Erweiterungen und installieren Sie alle gewünschten Erweiterungen. Kopieren Sie die installierten Erweiterungen von ihrem Installationsort (mit Windows C:\Users\<username>\.vscode\extensions) an denselben Speicherort auf dem Zielcomputer.

Funktioniert perfekt.

Petah
quelle