Visual Studio Code uzantılarını çevrimdışı olarak nasıl yükleyebilirim?


Yanıtlar:


202

GÜNCELLEME 2017-12-13

Artık uzantıyı doğrudan pazardan indirebilirsiniz .

Buraya resim açıklamasını girin

Visual Studio Code 1.7.1'den itibaren uzantıyı sürüklemek veya açmak artık çalışmıyor. Manuel olarak kurmak için yapmanız gerekenler:

  • uzantılar kenar çubuğunu aç
  • sağ üst köşedeki üç noktaya tıklayın
  • VSIX'ten Yükle'yi seçin

VSIX'ten yükleyin ...


Eski Yöntem

Belgelere göre bir uzantıyı doğrudan indirmek mümkündür:

Bir uzantının doğrudan indirme URL'si şu biçimdedir:

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

Bu, uzantıyı indirmek için bilmeniz gereken anlamına gelir.

  • yayıncı adı
  • sürüm
  • uzantı adı

Tüm bu bilgileri URL adresinde bulabilirsiniz.

Misal

C # v1.3.0 uzantısını yüklemek için bir örnek :

Yayıncı, Uzantı ve Sürüm

Yayıncı ve uzantı adlarını, uzantının ana sayfasında, URL'sinde bulabilirsiniz:

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

Burada yayıncı ms-vscodeve uzantı adı csharp.

Sürüm, Daha Fazla Bilgi alanında sağ tarafta bulunabilir .

İndirmek için yukarıdaki şablondan bir bağlantı oluşturmanız gerekir:

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

Tüm paketler aynı Microsoft.VisualStudio.Services.VSIXPackage adına sahip olacaktır , bu nedenle daha sonra hangi paket olduğunu öğrenmek istiyorsanız indirdikten sonra yeniden adlandırmanız gerekecektir.

Kurulum

Uzantıyı yüklemek için

  • Dosyayı yeniden adlandırın ve *.vsixuzantıyı verin
  • Visual Studio Code'u açın, FileOpen File ... veya Ctrl+ menüsüne gidin Ove .vsixdosyayı seçin
  • Her şey yolunda giderse, pencerenin üst kısmında şu mesajı görmelisiniz:

Uzantı başarıyla yüklendi. Etkinleştirmek için yeniden başlatın.


10
Uzantı sayfasında kullanmak için bir yer imi uygulaması yaptım. Bakalım ne kadar uzun süre çalışmaya devam edecek !: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

VS Code 1.7.1'de (Ekim 2016) yükleme adımı benim için işe yaramadı.
Roy Dictus

@RoyDictus ideed, VSCode uzantıların bağlantısını yüklemek yerine gösterir: - | bir şeyi değiştirmiş olmalılar.
t3chb0t

@RoyDictus güncellemeye bakın - bu sizin için çalışmalı. Ekran görüntülerini başka zaman ekleyeceğim.
t3chb0t

2
Bu yanıtın iyi bilgileri var; ancak, C # kötü bir örnektir, özellikle soru "internete bağlı olmayan ve bağlanamayan bir makine" dediğinden . C # uzantısı burada açıklandığı gibi çevrimdışı yüklenemez çünkü aktivasyondan sonra platforma özgü bileşenleri indirmeye çalışır ve bunun yerine belirli bir çevrimdışı paket oluşturulmalıdır .
Herohtar

19

t3chb0t'ın cevabına ek olarak, indirme seçeneğinin neden görünür olmadığından emin değilim, bu yüzden GreaseMonkey / TamperMonkey kullananlar için bir yama oluşturdu: ana kodu burada bulabilirsiniz

Veya aşağıdaki satırları tarayıcı konsolunuza yapıştırabilirsiniz ve bağlantı sihirli bir şekilde görünecektir:

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

Güzel ama VSCode olarak gereksiz bağlantı şimdi web sitelerinde
Blowsie

1
@Blowsie sürekli değil, Windows'ta bağlantıyı görüyorum, Linux'ta görmüyorum
kbolino

15

Tüm bu öneriler harika, ancak takip edilmesi biraz acı verici çünkü URL'yi oluşturmak için kodu çalıştırmak veya bu çılgın URL'yi elle oluşturmak biraz can sıkıcı ...

Bu yüzden işleri kolaylaştırmak için hızlı bir web uygulamasını bir araya getirdim. İstediğiniz uzantının URL'sini yapıştırmanız yeterlidir ve uzantınızın indirilmesi zaten uygun şekilde adlandırılmıştır: publisher-extension-version.vsix.

Umarım birisi bunu yararlı bulur: http://vscode-offline.herokuapp.com/


Güzel ama VSCode olarak gereksiz bağlantı şimdi web sitelerinde
Blowsie

Doğru. Bu, onların adına çok yeni bir ekleme. Muhtemelen yakın gelecekte hizmetimi kaldıracağım.
Yaakov Chaikin

@YaakovChaikin bağlantı her zaman görünmüyor, ancak hizmetiniz tutarlı bir şekilde çalışıyor
kbolino

Bu havalı. Ne yazık ki başkaları Heroku yerine GitHub sayfalarında benzer şeyler yaptığında, ChrisF gibi kullanıcılar "GitHub'ınıza bağlantı verme" diyerek onları sildi. Moderatörlerin zorbaya dönüşmesi üzücü.
iconoclast

4

Bugün itibariyle indirme URL'si , uzantının son sürümünün , Pazar Yeri'ndeki sayfanın kaynağına aynen gömülüdür, örneğin, URL'deki kaynak:

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

dize içerir:

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

Dl URL'sini çıkarmak için aşağıdaki Python regexp kullanıyorum:

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

3

Başkasının buna rastlaması durumunda yığına bir PowerShell indirme seçeneği atmak istedim. Birkaç çevrimdışı senaryom var ve çevrimdışı kullandığım tüm uzantıları indirmek ve güncellemek için bunu bir döngüde çalıştırıyorum.

$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

T3chb0t'nin mükemmel cevabına ekleme - Tüm VSCode uzantılarını bir klasöre yüklemek için bu PowerShell komutlarını kullanın:

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

Ardından, kurulumu tamamlamak için VSCode'u yeniden yükleyin.


1

Artık bir uzantıyı doğrudan "Kaynaklar" bölümünden indirebilirsiniz, bir "Uzantıyı indir" bağlantısı vardır, umarım bu bilgiler hala yararlıdır.


1

Bir PowerShell komut dosyası kullanarak pazardan bir uzantı indirmek için ana fikrimde bir komut dosyası depoladım. Paylaşmak için yorum yapmaktan çekinmeyin.

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

Python kullanıcıları için t3chbot'un mükemmel cevabı ile kullanılacak model şuna benzer:

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

Sürüm numarasını girmeniz gereken yeri görmek için sağa kaydırdığınızdan emin olun.


0

Komut dosyası içeren bir çözüm arıyorsanız:

  1. İkili indirme URL'sini alın: Bir API kullanabilirsiniz, ancak bunun için herhangi bir belge olmadığı konusunda uyarılabilirsiniz. Bu API, .vsixdosyaları indirmek için bir URL döndürebilir (aşağıdaki örneğe bakın)
  2. İkili dosyayı indirin
  3. İkiliyi dikkatlice unzipiçine ~/.vscode/extensions/: sıkıştırılmamış dizin adını değiştirmeniz, bir dosyayı kaldırmanız ve diğerini taşımanız / yeniden adlandırmanız gerekir.

API için aşağıdaki örneğe bakarak başlayın ve isteğin nasıl değiştirileceğine dair ipuçları için https://github.com/Microsoft/vscode/blob/master/src/vs/platform/extensionManagement/node/extensionGalleryService.ts adresine gidin .

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

Yukarıdaki örneğin açıklamaları:

  • "filterType": 8- FilterType.Target daha fazla FilterType
  • "filterType": 7- FilterType.ExtensionName daha fazla FilterType
  • "flags": 514- 0x2 | 0x200- Flags.IncludeFiles | Flags.IncludeLatestVersionOnly- daha fazla Bayrak
    • bayrak ondalık değerini almak için çalıştırabilirsiniz python -c "print(0x2|0x200)"
  • "assetTypes": ["Microsoft.VisualStudio.Services.VSIXPackage"]- Sadece almak için bağlantı veren .vsixdosya daha AssetTypes

0

Çevrimdışı örneğinizde belirli (eski) bir VSCode sürümüne sahipseniz, en son uzantıları çekmek doğru şekilde entegre olmayabilir.

VSCode ve uzantıların birlikte çalıştığından emin olmak için, hepsinin çevrimiçi makineye birlikte yüklenmesi gerekir. Bu, tüm bağımlılıkları (belirli sürümlerle) çözer ve çevrimdışı örneğin tam olarak yapılandırılmasını sağlar.

Hızlı adımlar:

VSCode sürümünü yükleyin, güncellemeyi kapatın ve uzantıları yükleyin. Uzantıları kurulu konumdan kopyalayın ve hedef makineye yerleştirin.

Ayrıntılı adımlar:

VSCode'un tam sürümünü çevrimiçi makineye yükleyin. Ardından adresine giderek güncellemeleri kapatın File -> Preferences -> Settings. Gelen Settingspencere, under User Settings -> Application, gidin Updatebölüm ve için parametreyi değiştirmek Channeliçinnone . Bu, VSCode'un internete ulaşmasını ve sürümlerinizi en son sürüme otomatik güncellemesini engeller.

Ardından VSCode uzantıları bölümüne gidin ve istediğiniz tüm uzantıları yükleyin. Yüklenen uzantıları yükleme konumlarından (pencereleriyle birlikte C:\Users\<username>\.vscode\extensions) hedef makinedeki aynı konuma kopyalayın .

Mükemmel çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.