示例#1
0
        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);
        }