Jak mogę zainstalować rozszerzenia programu Visual Studio Code w trybie offline?

130

Zainstalowałem program Visual Studio Code na komputerze, który nie jest i nie może być połączony z Internetem. Zgodnie z dokumentacją mogę zainstalować rozszerzenie z wiersza poleceń, jeśli mam .vsix, ale nie wiem, jak pobrać .vsixz marketplace.

Jak mogę pobrać .vsixrozszerzenie hostowane na rynku ?

blachniet
źródło
Użyj download-vsix, pobierz vsix. ie) rajasimon.github.io/…
Raja Simon

Odpowiedzi:

202

UPDATE 2017-12-13

Możesz teraz pobrać rozszerzenie bezpośrednio z marketplace .

Tutaj wprowadź opis obrazu

Od wersji Visual Studio Code 1.7.1 przeciąganie lub otwieranie rozszerzenia już nie działa. Aby zainstalować go ręcznie, musisz:

  • otwórz pasek boczny rozszerzeń
  • kliknij wielokropek w prawym górnym rogu
  • wybierz Zainstaluj z VSIX

Zainstaluj z VSIX ...


Stara metoda

Zgodnie z dokumentacją możliwe jest bezpośrednie pobranie rozszerzenia:

Bezpośredni adres URL pobierania rozszerzenia ma postać:

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

Oznacza to, że aby pobrać rozszerzenie, musisz wiedzieć

  • nazwa wydawcy
  • wersja
  • nazwa rozszerzenia

Wszystkie te informacje znajdziesz w adresie URL.

Przykład

Oto przykład pobierania i instalowania rozszerzenia C # v1.3.0 :

Wydawca, rozszerzenie i wersja

Wydawcę i nazwy rozszerzeń można znaleźć na stronie głównej rozszerzenia w jego adresie URL:

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

Tutaj jest wydawca, ms-vscodea nazwa rozszerzenia to csharp.

Wersja znajduje się po prawej stronie w obszarze Więcej informacji .

Aby go pobrać, musisz utworzyć link z powyższego szablonu:

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

Wszystkie pakiety będą miały tę samą nazwę Microsoft.VisualStudio.Services.VSIXPackage , więc po pobraniu będziesz musiał zmienić jego nazwę, jeśli chcesz wiedzieć, jaki to był później.

Instalacja

Aby zainstalować rozszerzenie

  • Zmień nazwę pliku i nadaj mu *.vsixrozszerzenie
  • Otwórz Visual Studio Code, przejdź do menu PlikOtwórz plik ... lub Ctrl+ Oi wybierz .vsixplik
  • Jeśli wszystko poszło dobrze, u góry okna powinien pojawić się ten komunikat:

Rozszerzenie zostało pomyślnie zainstalowane. Uruchom ponownie, aby go włączyć.

t3chb0t
źródło
10
Zrobiłem bookmarklet do wykorzystania na stronie rozszerzenia. Zobaczmy, jak długo to działa !: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
Etap instalacji nie zadziałał dla mnie w VS Code 1.7.1 (październik 2016).
Roy Dictus
@RoyDictus ideed, VSCode pokazuje link do rozszerzeń zamiast go instalować: - | musieli coś zmienić.
t3chb0t
@RoyDictus zobacz aktualizację - to powinno działać dla Ciebie. Dołączę zrzuty ekranu innym razem.
t3chb0t
2
Ta odpowiedź zawiera dobre informacje; jednak C # jest złym przykładem, zwłaszcza że pytanie brzmi: „maszyna, która nie jest i nie może być połączona z Internetem” . Rozszerzenia języka C # nie można zainstalować w trybie offline, jak opisano tutaj, ponieważ po aktywacji próbuje pobrać składniki specyficzne dla platformy, a zamiast tego należy skompilować określony pakiet offline .
Herohtar
19

dodając do odpowiedzi t3chb0t, a nie wiem, dlaczego opcja do pobrania nie jest widoczny, więc stworzył łatkę dla tych, którzy używają GreaseMonkey / TamperMonkey: można znaleźć kod GIST tutaj

Możesz też po prostu wkleić poniższe wiersze w konsoli przeglądarki, a link w magiczny sposób pojawi się:

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
źródło
Ładne, ale zbędne, ponieważ VSCode udostępnia teraz link na swojej stronie internetowej
Blowsie
1
@Blowsie niekonsekwentnie, na Windowsie widzę link, na Linuksie nie
kbolino
15

Wszystkie te sugestie są świetne, ale trochę bolesne do naśladowania, ponieważ wykonanie kodu w celu skonstruowania adresu URL lub ręczne utworzenie tego szalonego adresu URL jest trochę denerwujące ...

Dlatego stworzyłem szybką aplikację internetową, aby wszystko było łatwiejsze. Po prostu wklej adres URL żądanego rozszerzenia, a zostanie wyświetlone pobranie rozszerzenia, które jest już poprawnie nazwane: wydawca-rozszerzenie-wersja.vsix.

Mam nadzieję, że ktoś uzna to za pomocne: http://vscode-offline.herokuapp.com/

Yaakov Chaikin
źródło
Ładne, ale zbędne, ponieważ VSCode udostępnia teraz link na swojej stronie internetowej
Blowsie
Poprawny. To bardzo niedawny dodatek z ich strony. Prawdopodobnie w najbliższej przyszłości wycofam się z mojej usługi.
Yaakov Chaikin
@YaakovChaikin link nie zawsze się wyświetla, ale Twoja usługa działa konsekwentnie
kbolino
To jest fajne. Niestety, gdy inni robili podobne rzeczy na stronach GitHub zamiast Heroku, użytkownicy tacy jak ChrisF usunęli je, mówiąc „nie linkuj do swojego GitHub”. To smutne, gdy moderatorzy stają się łobuzami.
ikonoklast
4

Od dzisiaj adres URL pobierania najnowszej wersji rozszerzenia jest dosłownie osadzony w źródle strony na Marketplace, np. Źródło pod adresem URL:

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

zawiera ciąg:

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

Używam następującego wyrażenia regularnego Pythona, aby wyodrębnić adres URL dl:

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

Chciałem wrzucić opcję pobierania PowerShell na stos na wypadek, gdyby ktoś inny to spotkał. Mam kilka scenariuszy offline i uruchamiam je w pętli, aby pobrać i zaktualizować wszystkie rozszerzenia, których używam offline.

$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
źródło
2

Dodawanie do doskonałej odpowiedzi t3chb0t - użyj tych poleceń PowerShell, aby zainstalować wszystkie rozszerzenia VSCode w folderze:

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

Następnie załaduj ponownie VSCode, aby zakończyć instalację.

Oren Chapo
źródło
1

Teraz możesz pobrać rozszerzenie bezpośrednio w sekcji „Zasoby”, jest tam link „Pobierz rozszerzenie”. Mam nadzieję, że te informacje są nadal przydatne.

Luis
źródło
1

Zapisałem skrypt w moim skrócie, aby pobrać rozszerzenie z rynku za pomocą skryptu PowerShell. Zapraszam do komentowania udostępniania go.

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
źródło
0

Dla użytkowników Pythona wzór do użycia z doskonałą odpowiedzią t3chbot wygląda następująco:

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

pamiętaj, aby przewinąć w prawo, aby zobaczyć, gdzie należy wprowadzić numer wersji.

Stoły Little Bobby
źródło
0

Jeśli szukasz rozwiązania skryptowego:

  1. Pobierz binarny adres URL pobierania: możesz użyć interfejsu API, ale pamiętaj, że nie ma do niego dokumentacji. Ten interfejs API może zwracać adres URL do pobierania .vsixplików (patrz przykład poniżej)
  2. Pobierz plik binarny
  3. Ostrożnie unzipplik binarny do ~/.vscode/extensions/: musisz zmodyfikować rozpakowaną nazwę katalogu, usunąć jeden plik i przenieść / zmienić nazwę innego.

Aby zapoznać się z interfejsem API, zacznij od spojrzenia na poniższy przykład, a wskazówki dotyczące modyfikowania żądania przejdź do 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,
}

Objaśnienia do powyższego przykładu:

  • "filterType": 8- FilterType.Target więcej typów filtrów
  • "filterType": 7- FilterType.ExtensionName więcej typów filtrów
  • "flags": 514- 0x2 | 0x200- Flags.IncludeFiles | Flags.IncludeLatestVersionOnly- więcej flag
    • aby uzyskać wartość dziesiętną flagi, którą możesz uruchomić python -c "print(0x2|0x200)"
  • "assetTypes": ["Microsoft.VisualStudio.Services.VSIXPackage"]- aby uzyskać tylko link do .vsixpliku więcej typów aktywów
m4js7er
źródło
0

Jeśli masz określoną (starszą) wersję VSCode w swoim wystąpieniu offline, pobieranie najnowszych rozszerzeń może nie zostać poprawnie zintegrowane.

Aby upewnić się, że VSCode i rozszerzenia współpracują ze sobą, wszystkie muszą być zainstalowane razem na maszynie online. Rozwiązuje to wszelkie zależności (z określonymi wersjami) i zapewnia dokładną konfigurację wystąpienia offline.

Szybkie kroki:

Zainstaluj wersję VSCode, wyłącz aktualizację i zainstaluj rozszerzenia. Skopiuj rozszerzenia z zainstalowanej lokalizacji i umieść je na komputerze docelowym.

Szczegółowe kroki:

Zainstaluj dokładną wersję VSCode na komputerze online. Następnie wyłącz aktualizacje, przechodząc do File -> Preferences -> Settings. W Settingsoknie User Settings -> Applicationprzejdź do Updatesekcji i zmień parametr na Channelna none. Zapobiega to łączeniu się VSCode z Internetem i automatycznej aktualizacji Twoich wersji do najnowszych.

Następnie przejdź do sekcji rozszerzeń VSCode i zainstaluj wszystkie żądane rozszerzenia. Skopiuj zainstalowane rozszerzenia z ich lokalizacji instalacji (w C:\Users\<username>\.vscode\extensionssystemie Windows ) do tej samej lokalizacji na komputerze docelowym.

Działa świetnie.

petah
źródło