locate_msbuild.ps1 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #-------------------------------------------------------------------------------------------------------
  2. # Copyright (C) Microsoft. All rights reserved.
  3. # Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. #-------------------------------------------------------------------------------------------------------
  5. # Locate-MSBuild
  6. #
  7. # Locate and return the preferred location of MSBuild on this machine.
  8. . $PSScriptRoot\util.ps1
  9. # helper to try to locate a single version
  10. function Locate-MSBuild-Version([string]$version) {
  11. $msbuildTemplate = "{0}\msbuild\{1}\Bin\{2}\msbuild.exe"
  12. $msbuildUnscoped = "{0}\msbuild\{1}\Bin\msbuild.exe"
  13. $msbuildExe = $msbuildTemplate -f "${Env:ProgramFiles}", $version, "x86"
  14. $_ = WriteMessage "Trying `"$msbuildExe`""
  15. if (Test-Path $msbuildExe) { return $msbuildExe }
  16. $msbuildExe = $msbuildUnscoped -f "${Env:ProgramFiles(x86)}", $version
  17. $_ = WriteMessage "Trying `"$msbuildExe`""
  18. if (Test-Path $msbuildExe) { return $msbuildExe }
  19. $msbuildExe = $msbuildTemplate -f "${Env:ProgramFiles(x86)}", $version, "amd64"
  20. $_ = WriteMessage "Trying `"$msbuildExe`""
  21. if (Test-Path $msbuildExe) { return $msbuildExe }
  22. return "" # didn't find it so return empty string
  23. }
  24. function Locate-MSBuild() {
  25. $msbuildExe = "msbuild.exe"
  26. if (Get-Command $msbuildExe -ErrorAction SilentlyContinue) { return $msbuildExe }
  27. $msbuildExe = Locate-MSBuild-Version("14.0")
  28. if ($msbuildExe -and (Test-Path $msbuildExe)) {
  29. $_ = WriteMessage "Found `"$msbuildExe`""
  30. return $msbuildExe
  31. }
  32. $_ = WriteMessage "Dev14 not found, trying Dev12..."
  33. $msbuildExe = Locate-MSBuild-Version("12.0")
  34. if ($msbuildExe -and (Test-Path $msbuildExe)) {
  35. $_ = WriteMessage "Found `"$msbuildExe`""
  36. return $msbuildExe
  37. }
  38. WriteErrorMessage "Can't find msbuild.exe."
  39. return "" # return empty string
  40. }