воскресенье, 26 марта 2017 г.

Compact offline installer for Visual Studio 2017 Community Edition

Оказывается, в начале марта Microsoft праздновала 20-летие Visual Studio, выпустив при этом в свет очередную версию своего детища для разработчиков – Microsoft Visual Studio 2017 (Visual Studio 2017 is coming on March 7). Хотя мне и прислали письмо-приглашение на это мероприятие, я его пропустил, т.к. для своих проектов до сих пор использую Visual Studio 2012 Express и совершать upgrade не планировал. Припоминаю, разок я всё-таки умудрился установить Visual Studio 2015 Community Edition на свой ноутбук, но это чудо информационной мысли в минимальной конфигурации (C++ и C#) отъедает порядка 10 GB накопителя, что неможко слишком чересчур. Тогда я отложил затею с обновлением до момента расширения дискового пространства (с прицелом на это был заказан mSATA SSD KingFast F9M на 128 GB, который всё никак не доберётся до места назначения), но на днях, вновь наткнувшись на старое письмо, подумал: “Ну-ка, гляну на передовой продукт…”

Вскоре я уже добрался до страницы о том, как создать offline-инсталлятор для Visual Studio 2017 (о, как!). Да, компания Microsoft отказалась от предоставления ISO-файлов данного продукта. Почему? Предположу, что помимо озвученного “пресс-центром” удобства/гибкости для разработчиков (в комментариях, кстати, многие возмущаются – мол, где ISO-шки?!), инсталляция уже не помещалась на парочку компактов (напр., имеющийся у меня файл vs2015.3.com_enu.iso имеет размер более 7 GB, и два года продукт не топтался на месте, конечно же). Как вы зацените в дальнейшем, инсталлятор Visual Studio 2017 Community Edition занимает порядка 20 GB, при том, что не всё из комплекта нужно всем и каждому…

ISO-installer, bye-bye!

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

Т.е. если вам не жалко 20 GB под эквивалент ISO-шки, то достаточно выполнить команду:

vs_community.exe --layout C:\vs2017offline --lang en-US

Через n-ое кол-во часов вы сможете оценить масштабы передовых технологий для кросс-платформенной разработки :)

В моём случае скачивание застряло после 10 GB из-за закончившегося места (загрузчик не спешит подчищать %TEMP% по ходу пьесы, и этот каталог был на системном разделе, который оказался не резиновым).

После раскуривания командной строки я решил ограничиться desktop-компонентами для разработки на C++ и C#:

vs_community.exe --layout C:\vs2017offline --lang en-US –-add Microsoft.VisualStudio.Workload.ManagedDesktop –-add Microsoft.VisualStudio.Workload.NativeDesktop

После завершения скачивания я перевёл компьютер в offline-режим и попытался установить эти пасочки, но у меня получилось это сделать лишь частично, т.к. сказать, в минимальной конфигурации. После недолгих мытарств мне стало ясно, что никакие из т.н. рекомендуемых компонентов не скачались в кеш. Делу не помог и ключ –-includeRecommended - судя по комментариям, с -–layout он не совместим ни у кого (скорее всего, ошибка в инсталляторе).

Пришлось ещё раз штудировать список идентификаторов нагрузок и компонентов, и в итоге я написалъ скриптъ:

@echo off
set LAYOUT_DIR=%1
if "%LAYOUT_DIR%"=="" (
  echo Please, specify offline cache directory as the 1st parameter: %~nx0 SomeDir
  exit 1
)

REM The executable name will probably change in future
set vs_community_exe=vs_community__296967863.1490362753.exe

REM Managed Desktop and its recommended components
set ManagedDesktop=--add Microsoft.VisualStudio.Workload.ManagedDesktop
set ManagedDesktop=%ManagedDesktop% --add Microsoft.ComponentGroup.Blend
set ManagedDesktop=%ManagedDesktop% --add Microsoft.Net.Component.4.5.1.TargetingPack
set ManagedDesktop=%ManagedDesktop% --add Microsoft.Net.Component.4.5.2.TargetingPack
set ManagedDesktop=%ManagedDesktop% --add Microsoft.Net.Component.4.5.TargetingPack
set ManagedDesktop=%ManagedDesktop% --add Microsoft.Net.Component.4.6.TargetingPack
set ManagedDesktop=%ManagedDesktop% --add Microsoft.Net.Component.4.TargetingPack
set ManagedDesktop=%ManagedDesktop% --add Microsoft.Net.ComponentGroup.TargetingPacks.Common
set ManagedDesktop=%ManagedDesktop% --add Microsoft.VisualStudio.Component.DiagnosticTools
set ManagedDesktop=%ManagedDesktop% --add Microsoft.VisualStudio.Component.EntityFramework
set ManagedDesktop=%ManagedDesktop% --add Microsoft.VisualStudio.Component.IntelliTrace.FrontEnd
set ManagedDesktop=%ManagedDesktop% --add Microsoft.VisualStudio.Component.LiveUnitTesting

REM Native Desktop and its recommended components
set NativeDesktop=--add Microsoft.VisualStudio.Workload.NativeDesktop
set NativeDesktop=%NativeDesktop% --add Microsoft.VisualStudio.Component.Graphics.Tools
set NativeDesktop=%NativeDesktop% --add Microsoft.VisualStudio.Component.Graphics.Win81
set NativeDesktop=%NativeDesktop% --add Microsoft.VisualStudio.Component.Static.Analysis.Tools
set NativeDesktop=%NativeDesktop% --add Microsoft.VisualStudio.Component.VC.CMake.Project
set NativeDesktop=%NativeDesktop% --add Microsoft.VisualStudio.Component.VC.DiagnosticTools
set NativeDesktop=%NativeDesktop% --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64
set NativeDesktop=%NativeDesktop% --add Microsoft.VisualStudio.Component.Windows10SDK.14393
REM Optional component "Visual C++ ATL support" gets selected by default
set NativeDesktop=%NativeDesktop% --add Microsoft.VisualStudio.Component.VC.ATL
REM Two optional components for "Windows 8.1 SDK and UCRT SDK" (required to build with CMake)
set NativeDesktop=%NativeDesktop% --add Microsoft.Component.VC.Runtime.UCRTSDK
set NativeDesktop=%NativeDesktop% --add Microsoft.VisualStudio.Component.Windows81SDK

REM GO!
REM --add Microsoft.VisualStudio.Workload.CoreEditor is redundant
%vs_community_exe% --layout "%LAYOUT_DIR%" --lang en-US --locale en-US %ManagedDesktop% %NativeDesktop%

Я ограничился лишь рекомендуемыми компонентами для .NET desktop development и Desktop development with C++, однако при дальнейшей инсталляции выяснилось, что опциональный компонент “Visual C++ ATL support” оказывается отмечен “галочкой” по умолчанию, поэтому пришлось и его посчитать (+20 МБ).

В процессе экспериментов над этим чудо-инсталлятором я рассматривал вариант с разделением продуктов (workloads) по каталогам, но это направление оказалось неперспективным – ManagedDesktop (920 МБ) и NativeDesktop (1680 МБ) имеют более 600 МБ общих компонентов. Общий для них CoreEditor занимает почти 300 МБ. Если оба этих продукта разместить в одном каталоге, то вместе с рекомендуемыми компонентами на это достаточно отвести около 2 Гб, что выглядит достаточно компактно.

Установка Visual Studio Community 2017 в автономном режиме

Перед запуском инсталяции необходимо установить сертификаты. Если целевой компьютер не подключен к Интернет, то нужные сертификаты можно найти в каталоге certificates, их там всего три:

  • manifestCounterSignCertificates.p12
  • manifestSignCertificates.p12
  • vs_installer_opc.SignCertificates.p12

Для пуска установки я тоже написалъ скриптъ:

@echo off
set LAYOUT_DIR=%1
if "%LAYOUT_DIR%"=="" (
  echo Please, specify offline cache directory as the 1st parameter: %~nx0 SomeDir
  exit 1
)

REM The executable name will probably change in future
set vs_community_exe=%LAYOUT_DIR%/vs_community__296967863.1490362753.exe

%vs_community_exe% --locale en-US

Но формально важным здесь является лишь параметр --locale en-US, значение которого должно совпадать с тем языком, для которого вы скачали установочные пакеты ранее. Без указанного параметра инсталлято может запутаться с языками системы и завершиться без каких-либо отчётливых жалоб – придётся ворошить log-файлы.

В установленном виде NativeDesktop с выбранными по умолчанию компонентами требует порядка 6 ГБ, из которых ок. 2 ГБ отводится для Windows 10 SDK Kit, на расположение которого повлиять из инсталлятора невозможно, и он устанавливается на системный раздел. В добавок к этому ManagedDesktop c компонентами по умолчанию занимает ок. 1.5 ГБ.

Вместо заключения

На мой взгляд, компания Microsoft реализовала весьма рациональный подход в своём инсталляторе для Visual Studio 2017, который позволяет на этапе скачивания выбрать из продуктов то, что необходимо. К сожалению, использование продвинутых возможностей требует дополнительных инструкций и собственных экспериментов (надеюсь, документация будет улучшена в будущем), а наличие некоторых  недоработок (напр., несовместимость ключей –-includeRecommended и -–layout) незначительно осложняет получение удовольствия от процесса ;)

[2017.05.28] Обновляем инсталятор

Недавно мне понадобилось доустановить компонент Microsoft.VisualStudio.Component.VC.140 (VC++ 2015.3 v140 toolset (x86,x64)), который ранее в моём списке не значился, т.к. числился опциональным. Попутно я решил проверить, как далеко зашёл прогресс за два месяца, и запустил приведенный ранее скрипт для создания кеша установочных пакетов…

Подождав до завершения часок, я обнаружил, что каталог с кешем подрос до 3383 МБ (вместо 2293 МБ имевшихся ранее), и вместе с размером увеличилось и кол-во каталогов:

  2017.03.27 2017.05.28 2017.05.28 (после чистки)
Размер, МБ 2293 3383 2294
Кол-во каталогов с пакетами 351 493 354

Самым жирным (614 МБ) является Windows 10 SDK, который обновили с версии 79501 до 79513.

При таком раскладе, если охота сэкономить 1 ГБ дискового пространства, эффективнее выкачать все пакеты заново, в противном случае - ручная чистка и всё такое.

Что же касается виновника торжества - VC++ 2015.3 v140 toolset – то с его появлением каталог подрос до 2935 МБ…

Не исключено, что после применения обновления при запуске Студии у вас начнёт появляться окошко “Unknown Error”. Лечится это удалением настроек в ?:\Users\???\AppData\Local\Microsoft\VisualStudio\ (каталоги вида 15.0_149d906e) – см. жалобы других пользователей. После этого настройки IDE лучше проверить, т.к. в моём случае, несмотря на то, что я вошел в Visual Studio Profile, всё сбросилось в изначальное состояние…

Комментариев нет:

Отправить комментарий