Skip to content

Commit

Permalink
Add Vs install script (#4607)
Browse files Browse the repository at this point in the history
  • Loading branch information
jkotalik authored Dec 12, 2018
1 parent 98f2973 commit 7475342
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/BuildFromSource.md
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
31 changes: 31 additions & 0 deletions scripts/VsRequirements/vs.json
Original file line number Diff line number Diff line change
@@ -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 changes: 66 additions & 0 deletions scripts/install_vs.ps1
Original file line number Diff line number Diff line change
@@ -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"
}

0 comments on commit 7475342

Please sign in to comment.