private string GetMSBuildPath() { if (MSBuildVersion == "NotApplicable") { throw new InvalidOperationException($"Parameter 'MSBuildVersion' is set to 'NotApplicable'"); } string msBuildPath; if (MSBuildVersion.StartsWith("14", StringComparison.OrdinalIgnoreCase)) { msBuildPath = Path.Combine( System.Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MSBuild", "14.0", "Bin", "MSBuild.exe"); } else if (MSBuildVersion.StartsWith("15", StringComparison.OrdinalIgnoreCase)) { var vsPath = Path.Combine( System.Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "Microsoft Visual Studio", GetVSVersion(MSBuildVersion)); var buildToolsPath = Path.Combine(vsPath, "BuildTools"); if (!Directory.Exists(buildToolsPath)) { buildToolsPath = Path.Combine(vsPath, "Enterprise"); } if (!Directory.Exists(buildToolsPath)) { throw new InvalidOperationException($"Could not find MSBuild.exe under {vsPath}"); } msBuildPath = Path.Combine( buildToolsPath, "MSBuild", "15.0", "Bin", "MSBuild.exe"); } else { throw new InvalidOperationException($"Unknown MSBuild version: {MSBuildVersion}"); } // Verify version var output = Util.RunProcess(msBuildPath, "/nologo /version", RootTempDir); if (!output.Trim().Equals(MSBuildVersion, StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException($"Incorrect MSBuild version: {output}"); } return(msBuildPath); }