Как установить расширения Visual Studio Code в автономном режиме?


130

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

Как я могу загрузить .vsixрасширение, размещенное на торговой площадке ?


Используйте download-vsix, загрузите vsix. ie) rajasimon.github.io/…
Raja Simon

Ответы:


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 Code 1.7.1 (октябрь 2016 г.).
Рой Диктус

@RoyDictus ideed, VSCode показывает ссылку на расширения вместо его установки: - | они, должно быть, что-то изменили.
t3chb0t

@RoyDictus см. Обновление - это должно сработать для вас. Скриншоты приложу в другой раз.
t3chb0t

2
В этом ответе содержится хорошая информация; однако C # - плохой пример, особенно с учетом того, что в вопросе говорится, что «машина не подключена и не может быть подключена к Интернету» . Расширение C # не может быть установлено в автономном режиме, как описано здесь, поскольку оно пытается загрузить компоненты для конкретной платформы после активации, и вместо этого необходимо создать конкретный автономный пакет .
Herohtar 05

19

добавление к ответу t3chb0t, не знаю, почему опция загрузки не отображается, поэтому создал патч для тех, кто использует GreaseMonkey / TamperMonkey: вы можете найти здесь код сути

Или вы можете просто вставить следующие строки в консоль браузера, и ссылка волшебным образом появится:

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». Печально, когда модераторы становятся хулиганами.
iconoclast

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 для извлечения 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,
}

Пояснения к приведенному выше примеру:

  • "filterType": 8- FilterType.Target больше FilterTypes
  • "filterType": 7- FilterType.ExtensionName больше FilterTypes
  • "flags": 514- 0x2 | 0x200- Flags.IncludeFiles | Flags.IncludeLatestVersionOnly- еще флаги
    • чтобы получить десятичное значение флага, вы можете запустить python -c "print(0x2|0x200)"
  • "assetTypes": ["Microsoft.VisualStudio.Services.VSIXPackage"]- чтобы получить только ссылку на .vsixфайл еще AssetTypes

0

Если у вас есть конкретная (устаревшая) версия VSCode в автономном экземпляре, загрузка последних расширений может не интегрироваться должным образом.

Чтобы убедиться, что VSCode и расширения работают вместе, все они должны быть установлены вместе на онлайн-машине. Это устраняет любые зависимости (с конкретными версиями) и обеспечивает точную конфигурацию автономного экземпляра.

Быстрые шаги:

Установите версию VSCode, отключите обновление и установите расширения. Скопируйте расширения из установленного места и разместите их на целевой машине.

Подробные шаги:

Установите точную версию VSCode на онлайн-машину. Затем отключите обновления, перейдя в File -> Preferences -> Settings. В Settingsокне на User Settings -> Application, перейдите в Updateраздел, и изменить параметр , Channelчтобыnone . Это предотвращает доступ VSCode к Интернету и автоматическое обновление ваших версий до последних.

Затем перейдите в раздел расширений VSCode и установите все желаемые расширения. Скопируйте установленные расширения из места их установки (вместе с Windows C:\Users\<username>\.vscode\extensions) в то же место на целевой машине.

Прекрасно работает.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.