Як я можу встановити розширення коду Visual Studio в автономному режимі?


130

Я встановив Visual Studio Code на машину, яка не є і не може бути підключена до Інтернету. Згідно з документацією , я можу встановити розширення з командного рядка, якщо у мене є .vsix, але я не знаю, як отримати його .vsixз ринку.

Як я можу завантажити .vsixрозширення, розміщене на ринку ?


Використовуйте download-vsix, завантажуйте vsix. тобто) rajasimon.github.io/…
Раджа Саймон

Відповіді:


202

ОНОВЛЕННЯ 2017-12-13

Тепер ви можете завантажити розширення безпосередньо з ринку .

Введіть тут опис зображення

Станом на Visual Studio Code 1.7.1 перетягнення або відкриття розширення вже не працює. Щоб встановити його вручну, потрібно:

  • відкрийте бічну панель розширень
  • натисніть на еліпсис у правому верхньому куті
  • виберіть Встановити з VSIX

Встановити з VSIX ...


Старий метод

Згідно з документацією, ви можете завантажити розширення безпосередньо:

URL-адреса для прямого завантаження розширення у формі:

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

Це означає, що для завантаження розширення потрібно знати

  • назва видавця
  • версія
  • назва розширення

Ви можете знайти всю цю інформацію за URL-адресою.

Приклад

Ось приклад для завантаження встановлення розширення C # v1.3.0 :

Видавець, розширення та версія

Ви можете знайти імена видавця та розширення на домашній сторінці розширення всередині його URL-адреси:

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

Тут видавець ms-vscodeі назва розширення csharp.

Версію можна знайти з правого боку в області Більше інформації .

Щоб завантажити його, вам потрібно створити посилання з вищевказаного шаблону:

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

Усі пакети матимуть однакову назву Microsoft.VisualStudio.Services.VSIXPackage , тому після завантаження вам потрібно буде перейменувати її, якщо ви хочете дізнатися, який пакет був пізніше.

Установка

Для того щоб встановити розширення

  • Перейменуйте файл і надайте йому *.vsixрозширення
  • Відкрийте код Visual Studio, перейдіть до меню ФайлВідкрити файл ... або Ctrl+ Oта виберіть .vsixфайл
  • Якщо все пішло добре, ви побачите це повідомлення у верхній частині вікна:

Розширення успішно встановлено. Перезапустіть, щоб увімкнути це.


10
Я зробив закладку для використання на сторінці розширення. Подивимося, як довго він працює !: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 1.7.1 (жовтень 2016 р.).
Рой Дікт

@RoyDictus ideed, VSCode показує посилання на розширення замість його встановлення: - | вони, мабуть, щось змінили.
t3chb0t

@RoyDictus дивіться оновлення - це повинно працювати для вас. Я прикріплю скріншоти в інший раз.
t3chb0t

2
Ця відповідь має добру інформацію; однак, C # є поганим прикладом, тим більше, що в запитанні йдеться про "машину, яка не є і не може бути підключена до Інтернету" . Розширення C # не може бути встановлено в автономному режимі, як описано тут, оскільки він намагається завантажити компоненти, що стосуються платформи після активації, і замість цього повинен бути створений певний офлайн-пакет .
Герохтар

19

додавання до відповіді t3chb0t, а не знаю , чому можливість завантаження не видно, тому створив патч для тих , хто використовує GreaseMonkey / TamperMonkey: ви можете знайти код GIST тут

Або ви можете просто вставити рядки нижче в консоль браузера, і посилання магічно з'явиться:

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

Приємно, але надмірно, як VSCode тепер надає посилання на своєму веб-сайті
Blowsie

1
@Blowsie не послідовно, в Windows я бачу посилання, в Linux я не
kbolino

15

Усі ці пропозиції є чудовими, але настільки болісними, тому що виконання коду для побудови URL-адреси або побудова цієї шаленої URL-адреси вручну набридає ...

Отже, я зібрав швидкий веб-додаток, щоб полегшити справи. Просто вставте URL-адресу потрібного розширення, і вийде завантаження розширення, яке вже було названо належним чином: publisher-extension-version.vsix.

Сподіваюся, хтось вважає це корисним: http://vscode-offline.herokuapp.com/


Приємний, але зайвий, як VSCode, тепер надає посилання на своєму веб-сайті
Blowsie

Правильно. Це зовсім недавнє доповнення з їхнього боку. Я, мабуть, найближчим часом приберу свою послугу.
Яків Чайкін

@YaakovChaikin посилання не завжди з’являється, але ваша служба працює послідовно
kbolino

Це круто. На жаль, коли інші робили подібні речі на сторінках GitHub замість Heroku, такі користувачі, як ChrisF видалили їх, сказавши "не посилайтеся на ваш GitHub". Сумно, коли модератори стають хуліганами.
іконоборство

4

На сьогоднішній день URL-адреса для завантаження останньої версії розширення вкладається дослівно у джерело сторінки на Marketplace, наприклад, джерело за URL-адресою:

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

містить рядок:

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

Я використовую наступний Python regexp для вилучення URL-адреси dl:

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

3

Я хотів кинути на стопку варіант завантаження PowerShell у випадку, якщо хтось інший натрапив на це. У мене є кілька сценаріїв офлайн, і я запускаю це в циклі, щоб завантажити та оновити всі розширення, які використовую в режимі офлайн.

$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 - Використовуйте ці команди PowerShell для встановлення всіх розширень VSCode у папці:

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

Потім перезавантажте VSCode, щоб завершити встановлення.


1

Тепер ви можете завантажити розширення безпосередньо у розділі "Ресурси", там є посилання "Завантажити розширення", сподіваюся, ця інформація все ще корисна.


1

Я зберігав сценарій у своїй суті, щоб завантажити розширення з ринку за допомогою сценарію PowerShell. Не соромтесь коментувати поділитися цим.

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 зразок використання з відмінною відповіддю t3chbot виглядає так:

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

не забудьте прокрутити право, щоб побачити, де потрібно ввести номер версії.


0

Якщо ви шукаєте сценарій рішення:

  1. Отримайте двійкову URL-адресу для завантаження: ви можете використовувати API, але попередити про відсутність документації. Цей API може повернути URL-адресу для завантаження .vsixфайлів (див. Приклад нижче)
  2. Завантажте двійковий файл
  3. Обережно unzipбінарне в ~/.vscode/extensions/: вам потрібно змінити нерозпаковане ім'я каталогу, видалити один файл і перемістити / перейменувати ще один.

Для початку API перегляньте наступний приклад та поради щодо того, як змінити запит, перейдіть до 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,
}

Пояснення до вищевказаного прикладу:


0

Якщо у вашому офлайн-екземплярі є певна (застаріла) версія VSCode, витягнення останніх розширень може не належним чином інтегруватися.

Щоб переконатися, що VSCode та розширення працюють разом, їх потрібно встановити разом на онлайн-машині. Це вирішує будь-які залежності (із конкретними версіями) та забезпечує точну конфігурацію офлайн-екземпляра.

Швидкі кроки:

Встановіть версію VSCode, вимкніть оновлення та встановіть розширення. Скопіюйте розширення з встановленого місця та розмістіть їх на цільовій машині.

Детальні кроки:

Встановіть точну версію VSCode на онлайн-машині. Потім вимкніть оновлення, перейшовши на File -> Preferences -> Settings. У Settingsвікні під User Settings -> Application, перейдіть до Updateрозділу та змініть параметр для Channelна none. Це запобігає доступу VSCode до Інтернету та автоматичного оновлення версій до останнього.

Потім перейдіть до розділу розширень VSCode та встановіть усі бажані розширення. Скопіюйте встановлені розширення з місця їх встановлення (з вікнами його C:\Users\<username>\.vscode\extensions) у те саме місце на цільовій машині.

Працює чудово.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.