Browse Source

Add Vs install script (#4607)

Justin Kotalik 7 years ago
parent
commit
74753428e9
3 changed files with 98 additions and 0 deletions
  1. 1 0
      docs/BuildFromSource.md
  2. 31 0
      scripts/VsRequirements/vs.json
  3. 66 0
      scripts/install_vs.ps1

+ 1 - 0
docs/BuildFromSource.md

@@ -16,6 +16,7 @@ Building ASP.NET Core on Windows requires:
 * Windows 7 or higher
 * At least 10 GB of disk space and a good internet connection (our build scripts download a lot of tools and dependencies)
 * Visual Studio 2017. <https://visualstudio.com>
+    * To install the exact required components, run scripts\install_vs.ps1. This will use VS2017.
 * Git. <https://git-scm.org>
 * (Optional) some optional components, like the SignalR Java client, may require
     * NodeJS <https://nodejs.org>

+ 31 - 0
scripts/VsRequirements/vs.json

@@ -0,0 +1,31 @@
+{
+    "channelUri": "https://aka.ms/vs/15/release/channel",
+    "channelId": "VisualStudio.15.Release",
+    "productId": "Microsoft.VisualStudio.Product.Enterprise",
+    "includeRecommended": false,
+    "addProductLang": [
+        "en-US"
+    ],
+    "add": [
+        "Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
+        "Microsoft.VisualStudio.Component.Windows81SDK",
+        "Microsoft.Net.Component.4.7.2.TargetingPack",
+        "Microsoft.Net.Component.4.7.2.SDK",
+        "Microsoft.Net.Component.4.7.1.TargetingPack",
+        "Microsoft.Net.Component.4.7.TargetingPack",
+        "Microsoft.Net.Component.4.6.2.TargetingPack",
+        "Microsoft.Net.Component.4.6.1.TargetingPack",
+        "Microsoft.Net.Component.4.6.TargetingPack",
+        "Microsoft.Net.Component.4.5.2.TargetingPack",
+        "Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Win81",
+        "Microsoft.VisualStudio.Component.Azure.Storage.Emulator",
+        "Microsoft.VisualStudio.Component.VC.ATL",
+        "Microsoft.VisualStudio.Component.Windows10SDK.15063.Desktop",
+        "Microsoft.VisualStudio.Component.Windows10SDK.17134",
+        "Microsoft.VisualStudio.Workload.ManagedDesktop",
+        "Microsoft.VisualStudio.Workload.NetWeb",
+        "Microsoft.VisualStudio.Workload.NetCoreTools",
+        "Microsoft.VisualStudio.Workload.NativeDesktop",
+        "Microsoft.VisualStudio.Workload.VisualStudioExtension"
+    ]
+}

+ 66 - 0
scripts/install_vs.ps1

@@ -0,0 +1,66 @@
+<#
+.SYNOPSIS
+    Installs or updates Visual Studio on a local developer machine
+.PARAMETER Update
+    Update VS to latest version instead of modifying the installation to include new workloads.
+.PARAMETER Quiet
+    Whether to run installer in the background
+#>
+[CmdletBinding(DefaultParameterSetName = 'Default')]
+param(
+    [switch]$Update,
+    [switch]$Quiet
+)
+
+$ErrorActionPreference = 'Stop'
+Set-StrictMode -Version 1
+
+$intermedateDir = "$PSScriptRoot\obj"
+mkdir $intermedateDir -ErrorAction Ignore | Out-Null
+
+$bootstrapper = "$intermedateDir\vs_enterprise1.exe"
+Invoke-WebRequest -Uri 'https://aka.ms/vs/15/release/vs_enterprise.exe' -OutFile $bootstrapper
+
+$vsJson = "$PSScriptRoot\VsRequirements\vs.json"
+# no backslashes - this breaks the installer
+$vsInstallPath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Enterprise"
+$arguments = @(
+    '--installPath', "`"$vsInstallPath`"",
+    '--in', $vsJson,
+    '--wait',
+    '--norestart')
+
+if ($Update) {
+    $arguments = ,'update' + $arguments
+}
+else {
+    $arguments = ,'modify' + $arguments
+}
+
+if ($Quiet) {
+    $arguments += '--quiet'
+}
+
+Write-Host "Running '$bootstrapper $arguments' on $(hostname)"
+$process = Start-Process -FilePath $bootstrapper `
+    -ArgumentList $arguments `
+    -Verb runas `
+    -PassThru `
+    -ErrorAction Stop
+Write-Host "pid = $($process.Id)"
+Wait-Process -InputObject $process
+Write-Host "exit code = $($process.ExitCode)"
+
+# https://docs.microsoft.com/en-us/visualstudio/install/use-command-line-parameters-to-install-visual-studio#error-codes
+if ($process.ExitCode -eq 3010) {
+    Write-Warning "Agent $(hostname) requires restart to finish the VS update"
+}
+elseif ($process.ExitCode -eq 5007) {
+    Write-Error "Operation was blocked - the computer does not meet the requirements"
+}
+elseif (($process.ExitCode -eq 5004) -or ($process.ExitCode -eq 1602)) {
+    Write-Error "Operation was canceled"
+}
+elseif ($process.ExitCode -ne 0) {
+    Write-Error "Installation failed on $(hostname) for unknown reason"
+}