blob: bfde99e9ad0ffdd35ebd2dd685fde109ac5f5716 [file]
#-------------------------------------------------------------------------------------------------------
# Copyright (C) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
#-------------------------------------------------------------------------------------------------------
# Locate-MSBuild
#
# Locate and return the preferred location of MSBuild on this machine.
. $PSScriptRoot\util.ps1
# helper to try to locate a single version installed under "Microsoft Visual Studio" instead of under "MSBuild"
function Locate-MSBuild-Modern-Version([string]$product, [string]$version) {
$msbuildTemplate = "{0}\Microsoft Visual Studio\2017\{1}\MSBuild\{2}\Bin\{3}\msbuild.exe"
$msbuildUnscoped = "{0}\Microsoft Visual Studio\2017\{1}\MSBuild\{2}\Bin\msbuild.exe"
# e.g. C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe
$msbuildExe = $msbuildTemplate -f "${Env:ProgramFiles}", $product, $version, "x86"
$_ = WriteMessage "Trying `"$msbuildExe`""
if (Test-Path $msbuildExe) { return $msbuildExe }
$msbuildExe = $msbuildUnscoped -f "${Env:ProgramFiles(x86)}", $product, $version
$_ = WriteMessage "Trying `"$msbuildExe`""
if (Test-Path $msbuildExe) { return $msbuildExe }
$msbuildExe = $msbuildTemplate -f "${Env:ProgramFiles(x86)}", $product, $version, "amd64"
$_ = WriteMessage "Trying `"$msbuildExe`""
if (Test-Path $msbuildExe) { return $msbuildExe }
}
# helper to try to locate a single version
function Locate-MSBuild-Version([string]$version) {
$msbuildTemplate = "{0}\msbuild\{1}\Bin\{2}\msbuild.exe"
$msbuildUnscoped = "{0}\msbuild\{1}\Bin\msbuild.exe"
$msbuildExe = $msbuildTemplate -f "${Env:ProgramFiles}", $version, "x86"
$_ = WriteMessage "Trying `"$msbuildExe`""
if (Test-Path $msbuildExe) { return $msbuildExe }
$msbuildExe = $msbuildUnscoped -f "${Env:ProgramFiles(x86)}", $version
$_ = WriteMessage "Trying `"$msbuildExe`""
if (Test-Path $msbuildExe) { return $msbuildExe }
$msbuildExe = $msbuildTemplate -f "${Env:ProgramFiles(x86)}", $version, "amd64"
$_ = WriteMessage "Trying `"$msbuildExe`""
if (Test-Path $msbuildExe) { return $msbuildExe }
return "" # didn't find it so return empty string
}
function Locate-MSBuild() {
$msbuildExe = "msbuild.exe"
if (Get-Command $msbuildExe -ErrorAction SilentlyContinue) { return $msbuildExe }
$_ = WriteMessage "msbuild.exe not found on PATH, trying Dev15..."
$msbuildExe = Locate-MSBuild-Modern-Version -product "Enterprise" -version "15.0"
if ($msbuildExe -and (Test-Path $msbuildExe)) {
$_ = WriteMessage "Found `"$msbuildExe`""
return $msbuildExe
}
$_ = WriteMessage "Dev15 not found, trying Dev14..."
$msbuildExe = Locate-MSBuild-Version("14.0")
if ($msbuildExe -and (Test-Path $msbuildExe)) {
$_ = WriteMessage "Found `"$msbuildExe`""
return $msbuildExe
}
$_ = WriteMessage "Dev14 not found, trying Dev12..."
$msbuildExe = Locate-MSBuild-Version("12.0")
if ($msbuildExe -and (Test-Path $msbuildExe)) {
$_ = WriteMessage "Found `"$msbuildExe`""
return $msbuildExe
}
WriteErrorMessage "Can't find msbuild.exe."
return "" # return empty string
}