Introduction
Microsoft a largement modifié son concept d’installation de Visual Studio 2017 par rapport aux versions précédentes, versions qui étaient livrées sous formes d’images ISO et installaient discrètement un trop grand nombre de composants.
Avec Visual Studio 2017, les composants sont désormais regroupés en "charges de travail" (workloads) et les installations sont devenues plus personnalisables pour chaque module avec l’introduction des notions de composants obligatoires, recommandés et optionnels.
Dans cet article une image complète de Visual Studio 2017 Community Edition est rapatriée en local et un déploiement des composants souhaités est réalisé en mode silencieux. Une image complète en local présente un intérêt majeur dans les environnements pour lesquels les accès internet ne sont pas fiables ou à bas débit mais également pour le déploiement ultérieur sur d’autres postes de travail ou une réinstallation.
Création de l’image hors ligne (Offline Layout)
Télécharger l’installeur de Visual Studio 2017 Community Edition vs_Community.exe
(Téléchargements Visual Studio 2017).
Dans une commande DOS en tant qu’administrateur, lancer l’exécutable vs_Community.exe
avec l’option --layout
qui donne le répertoire de rapatriement en local des images. L’argument --lang
accepte en paramètre la ou les langues souhaitées pour les composants (ici : l’anglais et le français).
vs_Community.exe --layout D:\MSVisualStudio\2017 --lang en-US fr-FR
Dans la ligne de commande ci-dessus, l’intégralité des composants est rapatriée : ainsi l’opération est faite une fois pour toutes, mais bien entendu il est possible de ne rapatrier qu’une liste de composants définie. Par exemple, pour ne rapatrier en local que le module C++ pour Visual Studio avec ses composants recommandés et optionnels :
vs_Community.exe --layout D:\MSVisualStudio\2017 ^
--add Microsoft.VisualStudio.Workload.NativeDesktop ^
--includeRecommended --includeOptional ^
--lang en-US fr-FR
Dans le contexte d’installations silencieuses, la personnalisation des modules à déployer sera effectuée lors de cette étape, aussi mieux vaut tout télécharger maintenant.
vs_Community.exe --layout D:\MSVisualStudio\2017 --lang en-US fr-FR
… Planning 'Layout' operation Verified existing package 'Win10SDK.AppVerifier.Preparation,version=1.0.0' … Total packages to download: 1007 Starting 'Layout' operation … Download of … succeeded using engine 'WebClient' Layout progress: 1,41% … Layout progress: 81,78% …
L’intégralité des modules nécessite environ 25 GB d’espace. Le téléchargement dure environ 5 à 8 heures en fonction du débit internet.
En cas de problème ou d’erreurs, tous les fichiers de log sont créés dans le répertoire %TEMP%
.
À propos des erreurs, il peut s’agir d’erreurs de téléchargements, mais également d’erreurs d’exécutions de scripts, quelques commandes powershell, Python… sont en effet lancées vers la fin du téléchargement :
Running 'C:\WINDOWS\SysWOW64\\WindowsPowerShell\v1.0\powershell.exe' with parameters: -NonInteractive -NoLogo -NoProfile -ExecutionPolicy Bypass -InputFormat None "$ErrorActionPreference="""Stop"""; $VerbosePreference="""Continue"""; $CeipSetting="""on"""; $ScriptPath="""D:\Logitheque\langages\MSVisualStudio\2017\Win10SDK_Hidden_10.0.10240_2,version=10.0.10240.117\WinSdkInstall.ps1"""; $SetupExe="""sdksetup.exe"""; $SetupLogFolder="""standalonesdk"""; $PackageId="""Win10SDK_Hidden_10.0.10240_2"""; $SetupParameters="""/layout """"""D:\Logitheque\langages\MSVisualStudio\2017\Win10SDK_Hidden_10.0.10240_2,version=10.0.10240.117"""""" /quiet"""; $PayloadsNotYetDownloaded=1; (gc $ScriptPath | out-string) | Invoke-Expression; if (!$?) { exit 1603 } elseif ($LastExitCode) { exit $LastExitCode }"
Layout progress: 90,50%
Des erreurs sont notamment levées sous Windows 7 lors du lancement de scripts PowerShell sur des bibliothèques SDK de Windows 10, ces erreurs sont naturellement "normales" et non pénalisantes.
Préparation du fichier JSON d’installation
Dans les précédentes versions de Visual Studio, le paramétrage des composants était consigné dans un fichier XML AdminDeployment.xml
.
Désormais, bien plus simple, il s’agit d’un fichier au format JSON.
Ce fichier JSON doit être installé dans le répertoire racine de la distribution.
Un exemple est donné avec le fichier Response.template.json
à la racine de la distribution téléchargée.
Pour une installation personnalisée, le choix des modules et composants est donc réalisé ici en préparant ce fichier JSON :
install_vstudio2017.json
{
"installChannelUri": ".\\ChannelManifest.json"
,"channelUri": "https://aka.ms/vs/15/release/channel"
,"installCatalogUri": ".\\Catalog.json"
,"channelId": "VisualStudio.15.Release"
,"productId": "Microsoft.VisualStudio.Product.Community"
,"installPath": "D:\\software\\tools\\VS2017"
,"norestart": true
,"includeRecommended": true
,"addProductLang": [
"en-US",
"fr-FR"
]
,"add": [
"Microsoft.VisualStudio.Workload.Data",
"Microsoft.VisualStudio.Workload.DataScience",
"Microsoft.VisualStudio.Workload.ManagedDesktop",
"Microsoft.VisualStudio.Workload.NativeDesktop",
"Microsoft.VisualStudio.Workload.Universal",
"Component.GitHub.VisualStudio",
"Microsoft.VisualStudio.Component.LinqToSql"
]
}
La première section est obligatoire, elle répertorie les catalogues de la distribution :
{…
"installChannelUri": ".\\ChannelManifest.json"
,"channelUri": "https://aka.ms/vs/15/release/channel"
,"installCatalogUri": ".\\Catalog.json"
,"channelId": "VisualStudio.15.Release"
…}
L’édition du produit est ensuite donnée : Community, Enterprise…
{…
,"productId": "Microsoft.VisualStudio.Product.Community"
…}
Pour les versions avec licence (Enterprise…), la clé doit être donnée :
{…
,"productKey": "AABBCCDDEEFF0099DDMM77"
…}
La directive installPath
existe pour spécifier un chemin d’installation mais elle présente très peu d’intérêt, seule une infime partie des composants est délocalisable. Avec la directive norestart
, le redémarrage post installation est contrôlé.
{…
,"installPath": "D:\\software\\tools\\VS2017"
,"norestart": true
…}
Pour chaque module, l’installation des composants recommandés et optionnels est respectivement contrôlée avec les directives includeRecommended
et includeOptional
.
{…
,"includeRecommended": true
,"includeOptional": false
…}
L’ajout des langues est indiquée avec la directive addProductLang
:
{…
,"addProductLang": [
"en-US",
"fr-FR"
]
…}
La liste des modules Visual Studio à installer est enfin donnée :
{…
,"add": [
"Microsoft.VisualStudio.Workload.Data",
"Microsoft.VisualStudio.Workload.DataScience",
"Microsoft.VisualStudio.Workload.ManagedDesktop",
"Microsoft.VisualStudio.Workload.NativeDesktop",
"Microsoft.VisualStudio.Workload.Universal",
"Component.GitHub.VisualStudio",
"Microsoft.VisualStudio.Component.LinqToSql"
]
…}
Dans l’exemple ci-dessus, les besoins identifiés ont abouti au choix des modules suivants :
Microsoft.VisualStudio.Workload.Data |
Connecter, développer et tester des solutions SQL Server, Azure Data Lake, ou Hadoop |
Microsoft.VisualStudio.Workload.DataScience |
Langages et outils pour créér des applications de sciences de données avec Python, R et F# |
Microsoft.VisualStudio.Workload.ManagedDesktop |
Construction d’applications console, Windows Forms et WPF avec C#, Visual Basic et F# |
Microsoft.VisualStudio.Workload.NativeDesktop |
Construction d’applications Windows avec Visual C++, ATL et les fonctionnalités optionnelles MFC et C++/CLI |
Microsoft.VisualStudio.Workload.Universal |
Création d’applications Windows universelles avec C#, VB, Javascript et optionnellement C++ |
Component.GitHub.VisualStudio |
Extension GitHub pour Visual Studio |
Microsoft.VisualStudio.Component.LinqToSql |
Extension LINQ vers les outils SQL |
La liste des modules est très riche, énumérer tous les composants ne présente pas d’intérêt, la documentation officielle suffit largement : Visual Studio Community 2017 workload and component IDs
Lancement de l’installation silencieuse
L’installation silencieuse peut être enclenchée. Dans une invite de commandes DOS en tant qu’administrateur, la ligne de commandes est simple : le fichier JSON est donné en paramètre à l’exécutable vs_Community.exe
avec l’option --in
.
vs_Community.exe --quiet --wait --in D:\MSVisualStudio\2017\install_vstudio2017.json
Le chemin complet du fichier JSON doit être donné au paramètre in
.
Si un chemin relatif est donné, vs_installershell.exe
recherche le fichier JSON dans le répertoire C:\Program Files (x86)\Microsoft Visual Studio\Installer
.
Les fichiers de logs dd_bootstrapper%
sont créés dans le répertoire %TEMP%
.
Ne pas utiliser l’option --nocache
avec l’exécutable vs_Community.exe
, cette option supprime les packages de la distribution locale après installation.
Dans un contexte d’une installation réseau en mode hors ligne, en tant qu’administrateur, la ligne de commande est guère différente après avoir défini un partage (VStudio2017
) sur le répertoire contenant la distribution de Visual Studio :
\\SERVER\VStudio2017\vs_Community.exe --quiet --wait --in \\SERVER\VStudio2017\install_vstudio2017.json
En cas de doute sur le fichier JSON et les modules, avant l’installation silencieuse, lancer vs_Community.exe
en mode graphique avec le fichier JSON en paramètre sans déclencher l’installation :
vs_Community.exe --in D:\MSVisualStudio\2017\install_vstudio2017.json
Ajout d’un composant
Pour ajouter un composant, rien de plus simple, préparer un nouveau fichier JSON avec le composant à ajouter dans le répertoire de la distribution , ici le module de développement Python est ajouté (Microsoft.VisualStudio.Workload.Python
) :
vs_Community.exe --quiet --wait --in D:\MSVisualStudio\2017\addpythonmodule.json
addpythonmodule.json
{
"installChannelUri": ".\\ChannelManifest.json"
,"channelUri": "https://aka.ms/vs/15/release/channel"
,"installCatalogUri": ".\\Catalog.json"
,"channelId": "VisualStudio.15.Release"
,"productId": "Microsoft.VisualStudio.Product.Community"
,"installPath": "D:\\software\\tools\\VS2017"
,"norestart": true
,"includeRecommended": true
,"addProductLang": [
"en-US",
"fr-FR"
]
,"add": [
"Microsoft.VisualStudio.Workload.Python"
]
}
Suppression d’un composant
Pour supprimer un ou plusieurs composants, le mot clé add
est tout simplement remplacé par le mot clé remove
dans un fichier JSON.
vs_Community.exe --quiet --wait --in D:\MSVisualStudio\2017\removepythonmodule.json
removepythonmodule.json
{ ...
,"remove": [
"Microsoft.VisualStudio.Workload.Python"
]
}