Переглянути джерело

Update locate_msbuild.ps1 for Dev15.

Doug Ilijev 9 роки тому
батько
коміт
6aabb6020b
2 змінених файлів з 31 додано та 2 видалено
  1. 29 0
      Build/scripts/locate_msbuild.ps1
  2. 2 2
      Build/scripts/util.ps1

+ 29 - 0
Build/scripts/locate_msbuild.ps1

@@ -9,6 +9,25 @@
 
 . $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"
@@ -33,6 +52,16 @@ 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`""

+ 2 - 2
Build/scripts/util.ps1

@@ -32,14 +32,14 @@ function GetRepoRoot() {
 
 function WriteMessage($str) {
     Write-Output $str
-    if ($logFile -ne "") {
+    if ($logFile) {
         Write-Output $str | Out-File $logFile -Append
     }
 }
 
 function WriteErrorMessage($str) {
     $host.ui.WriteErrorLine($str)
-    if ($logFile -ne "") {
+    if ($logFile) {
         Write-Output $str | Out-File $logFile -Append
     }
 }