Files
terminal-microsoft/build/scripts/Set-LatestVCToolsVersion.ps1
Dustin L. Howett 9694946ae2 build: use the latest compiler *of the same version* (#20689)
There is a bug in the MSVC Preview compiler v14.52.

This fixes our CI failures and the broken exception handler for
ConptyConnection.

Closes #20677
2026-09-16 00:45:53 +00:00

32 lines
1.9 KiB
PowerShell

$VSInstances = ([xml](& 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -include packages -format xml))
$VSPackages = $VSInstances.instances.instance.packages.package
$LatestVCPackage = ($VSPackages | ? { $_.id -eq "Microsoft.VisualCpp.Tools.Core" })
$LatestVCToolsVersion = $LatestVCPackage.version;
$VSRoot = (& 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property 'resolvedInstallationPath')
$VCToolsRoot = Join-Path $VSRoot "VC\Tools\MSVC"
# We have observed a few instances where the VC tools package version actually
# differs from the version on the files themselves. We might as well check
# whether the version we just found _actually exists_ before we use it.
# We'll use whichever highest revision (within the same major.minor version) exists.
$PackageVCToolPath = Join-Path $VCToolsRoot $LatestVCToolsVersion
If ($Null -Eq (Get-Item $PackageVCToolPath -ErrorAction:Ignore)) {
$LatestVCToolsVersionAsVersion = [Version]$LatestVCToolsVersion
$VCToolsVersions = Get-ChildItem $VCToolsRoot | ForEach-Object {
[Version]$_.Name
} | Sort -Descending | Where-Object {
$_.Major -eq $LatestVCToolsVersionAsVersion.Major -and $_.Minor -eq $LatestVCToolsVersionAsVersion.Minor
}
$LatestActualVCToolsVersion = $VCToolsVersions | Select -First 1
If ($LatestVCToolsVersionAsVersion -Ne $LatestActualVCToolsVersion) {
Write-Output "VC Tools Mismatch: Directory = $LatestActualVCToolsVersion, Package = $LatestVCToolsVersion"
$LatestVCToolsVersion = $LatestActualVCToolsVersion.ToString(3)
}
}
Write-Output "Latest VCToolsVersion: $LatestVCToolsVersion"
Write-Output "Updating VCToolsVersion environment variable for job"
Write-Output "##vso[task.setvariable variable=VCToolsVersion]$LatestVCToolsVersion"