Bagaimana saya bisa menginstal ekstensi Visual Studio Code offline?

130

Saya telah menginstal Visual Studio Code pada mesin yang tidak, dan tidak dapat, terhubung ke Internet. Menurut dokumentasi , saya dapat menginstal ekstensi dari baris perintah jika saya punya .vsix, tapi saya tidak tahu bagaimana cara mendapatkannya .vsixdari pasar.

Bagaimana saya bisa mengunduh .vsixekstensi untuk yang diinangi di pasar ?

Blachniet
sumber
Gunakan unduhan-vsix unduh vsix. yaitu) rajasimon.github.io/…
Raja Simon

Jawaban:

202

UPDATE 2017-12-13

Anda sekarang dapat mengunduh ekstensi langsung dari pasar .

Masukkan deskripsi gambar di sini

Pada Visual Studio Code 1.7.1 menyeret atau membuka ekstensi tidak berfungsi lagi. Untuk menginstalnya secara manual, Anda perlu:

  • buka bilah samping ekstensi
  • klik pada elipsis di sudut kanan atas
  • pilih Instal dari VSIX

Instal dari VSIX ...


Metode lama

Menurut dokumentasi itu mungkin untuk mengunduh ekstensi secara langsung:

URL unduhan langsung ekstensi ada dalam formulir:

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

Ini berarti bahwa untuk mengunduh ekstensi yang perlu Anda ketahui

  • nama penerbit
  • versi
  • nama ekstensi

Anda dapat menemukan semua informasi ini di URL.

Contoh

Berikut ini contoh untuk mengunduh pemasangan ekstensi C # v1.3.0 :

Penerbit, Ekstensi dan Versi

Anda dapat menemukan penerbit dan nama ekstensi di beranda ekstensi di dalam URL-nya:

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

Di sini penerbitnya ms-vscodedan nama ekstensinya csharp.

Versi ini dapat ditemukan di sisi kanan di area More Info .

Untuk mengunduhnya, Anda perlu membuat tautan dari templat di atas:

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

Semua paket akan memiliki nama yang sama dengan Microsoft.VisualStudio.Services.VSIXPackage , jadi Anda harus mengganti namanya setelah mengunduh jika Anda ingin tahu paket apa itu nanti.

Instalasi

Untuk menginstal ekstensi

  • Ganti nama file dan berikan *.vsixekstensi
  • Buka Visual Studio Code, buka menu FileOpen File ... atau Ctrl+ Odan pilih .vsixfile
  • Jika semuanya berjalan dengan baik, Anda akan melihat pesan ini di bagian atas jendela:

Ekstensi berhasil diinstal. Mulai ulang untuk mengaktifkannya.

t3chb0t
sumber
10
Saya membuat bookmarklet untuk digunakan pada halaman ekstensi. Mari kita lihat berapa lama tetap bekerja !: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
Langkah instalasi tidak berhasil untuk saya, dalam VS Code 1.7.1 (Oktober 2016).
Roy Dictus
@RoyDictus ideed, VSCode menunjukkan tautan ke ekstensi daripada menginstalnya: - | mereka pasti telah mengubah sesuatu.
t3chb0t
@RoyDictus melihat pembaruan - ini seharusnya bekerja untuk Anda. Saya akan melampirkan tangkapan layar di lain waktu.
t3chb0t
2
Jawaban ini memiliki informasi yang bagus; Namun, C # adalah contoh buruk, terutama karena pertanyaannya menyatakan "mesin yang tidak, dan tidak dapat, terhubung ke internet" . Ekstensi C # tidak dapat diinstal secara offline seperti yang dijelaskan di sini karena ia mencoba mengunduh komponen khusus platform setelah aktivasi, dan sebagai gantinya paket offline spesifik harus dibuat .
Herohtar
19

menambahkan jawaban t3chb0t, tidak yakin mengapa opsi untuk mengunduh tidak terlihat, jadi buat tambalan bagi mereka yang menggunakan GreaseMonkey / TamperMonkey: Anda dapat menemukan kode intisari di sini

Atau Anda bisa menempelkan garis di bawah ini di konsol browser Anda, dan tautan itu secara ajaib akan muncul:

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
sumber
Bagus tapi mubazir karena VSCode sekarang menyediakan tautan di situs web mereka
Blowsie
1
@Blowsie tidak konsisten, di Windows saya melihat tautannya, di Linux saya tidak
kbolino
15

Semua saran ini bagus, tetapi agak menyakitkan untuk diikuti karena mengeksekusi kode untuk membuat URL atau membuat URL gila dengan tangan itu agak menyebalkan ...

Jadi, saya membuat aplikasi web cepat untuk mempermudah. Cukup rekatkan URL ekstensi yang Anda inginkan dan keluar, unduhlah ekstensi Anda yang telah dinamai dengan benar: publisher-extension-version.vsix.

Semoga seseorang menemukannya bermanfaat: http://vscode-offline.herokuapp.com/

Yaakov Chaikin
sumber
Bagus tapi berlebihan karena VSCode sekarang menyediakan tautan di situs web mereka
Blowsie
Benar. Itu tambahan yang sangat baru di pihak mereka. Saya mungkin akan mengambil layanan saya dalam waktu dekat.
Yaakov Chaikin
@YaakovChaikin tautan tidak selalu muncul, tetapi layanan Anda bekerja secara konsisten
kbolino
Ini keren. Sayangnya ketika orang lain melakukan hal serupa di halaman GitHub alih-alih Heroku, pengguna seperti ChrisF menghapusnya dengan mengatakan "jangan menautkan ke GitHub Anda". Sangat menyedihkan ketika moderator menjadi pengganggu.
iconoclast
4

Mulai hari ini, URL unduhan untuk versi terbaru ekstensi tertanam kata demi kata di sumber halaman di Marketplace, misalnya sumber di URL:

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

berisi string:

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

Saya menggunakan Python regexp berikut untuk mengekstrak URL dl:

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

Saya ingin melempar opsi unduh PowerShell di tumpukan jika-kalau ada orang lain yang menemukan ini. Saya memiliki beberapa skenario offline dan saya menjalankannya dalam satu lingkaran untuk mengunduh dan memperbarui semua ekstensi yang saya gunakan 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
sumber
2

Menambahkan ke jawaban terbaik t3chb0t - Gunakan perintah PowerShell ini untuk menginstal semua ekstensi VSCode dalam folder:

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

Kemudian, muat ulang VSCode untuk menyelesaikan instalasi.

Oren Chapo
sumber
1

Sekarang Anda dapat mengunduh ekstensi secara langsung di bagian "Sumber Daya", ada tautan "Unduh ekstensi", saya harap informasi ini masih berguna.

Luis
sumber
1

Saya telah menyimpan skrip di intisari saya untuk mengunduh ekstensi dari pasar menggunakan skrip PowerShell. Jangan ragu untuk berkomentar membagikannya.

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

Untuk pengguna Python, pola yang digunakan dengan jawaban luar biasa t3chbot terlihat seperti:

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

pastikan untuk menggulir ke kanan untuk melihat di mana Anda harus memasukkan nomor versi.

Tabel Bobby Kecil
sumber
0

Jika Anda mencari solusi skrip:

  1. Dapatkan URL unduhan biner: Anda dapat menggunakan API, tetapi berhati-hatilah karena tidak ada dokumentasi untuk itu. API ini dapat mengembalikan URL untuk diunduh.vsix file (lihat contoh di bawah)
  2. Unduh binernya
  3. Dengan hati unzip- hati biner menjadi ~/.vscode/extensions/: Anda perlu memodifikasi nama direktori yang tidak di-zip, menghapus satu file dan memindahkan / mengganti nama yang lain.

Untuk API mulailah dengan melihat contoh berikut, dan untuk petunjuk bagaimana memodifikasi kepala permintaan ke 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,
}

Penjelasan untuk contoh di atas:

  • "filterType": 8- FilterType.Target lebih banyak Tipe Filter
  • "filterType": 7- FilterType.ExtensionName lebih banyak Tipe Filter
  • "flags": 514- 0x2 | 0x200- Flags.IncludeFiles | Flags.IncludeLatestVersionOnly- lebih banyak Bendera
    • untuk mendapatkan nilai desimal bendera, Anda dapat menjalankan python -c "print(0x2|0x200)"
  • "assetTypes": ["Microsoft.VisualStudio.Services.VSIXPackage"]- untuk mendapatkan hanya tautan ke .vsixfile AssetTypes lainnya
m4js7er
sumber
0

Jika Anda memiliki versi VSCode khusus (lawas) pada contoh offline Anda, menarik ekstensi terbaru mungkin tidak terintegrasi dengan benar.

Untuk memastikan bahwa VSCode dan ekstensi berfungsi bersama, semuanya harus dipasang bersama di mesin online. Ini menyelesaikan setiap dependensi (dengan versi tertentu), dan memastikan konfigurasi yang tepat dari instance offline.

Langkah cepat:

Instal versi VSCode, matikan pembaruan, dan instal ekstensi. Salin ekstensi dari lokasi yang diinstal dan letakkan di mesin target.

Langkah-langkah terperinci:

Instal versi persis VSCode di mesin online. Kemudian matikan pembaruan dengan masuk ke File -> Preferences -> Settings. Di Settingsjendela, di bawah User Settings -> Application, buka Updatebagian, dan ubah parameter untuk Channelmenjadi none. Ini mencegah VSCode dari menjangkau ke internet dan memperbarui versi Anda secara otomatis ke yang terbaru.

Lalu buka bagian ekstensi VSCode dan instal semua ekstensi yang Anda inginkan. Salin ekstensi yang diinstal dari lokasi instalnya (dengan windows-nya C:\Users\<username>\.vscode\extensions) ke lokasi yang sama di mesin target.

Bekerja dengan sempurna.

petah
sumber