private static Dictionary <string, string> LoadVsVars(BuildTargetContext c) { if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { return(new Dictionary <string, string>()); } c.Verbose("Start Collecting Visual Studio Environment Variables"); var vsvarsPath = Path.GetFullPath(Path.Combine(Environment.GetEnvironmentVariable("VS140COMNTOOLS"), "..", "..", "VC")); // Write a temp batch file because that seems to be the easiest way to do this (argument parsing is hard) var temp = Path.Combine(Path.GetTempPath(), $"{Path.GetRandomFileName()}.cmd"); File.WriteAllText(temp, $@"@echo off cd {vsvarsPath} call vcvarsall.bat x64 set"); CommandResult result; try { result = Cmd(Environment.GetEnvironmentVariable("COMSPEC"), "/c", temp) .WorkingDirectory(vsvarsPath) .CaptureStdOut() .Execute(); } finally { if (File.Exists(temp)) { File.Delete(temp); } } result.EnsureSuccessful(); var vars = new Dictionary <string, string>(); foreach (var line in result.StdOut.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) { var splat = line.Split(new[] { '=' }, 2); if (splat.Length == 2) { c.Verbose($"Adding variable '{line}'"); vars[splat[0]] = splat[1]; } else { c.Info($"Skipping VS Env Variable. Unknown format: '{line}'"); } } c.Verbose("Finish Collecting Visual Studio Environment Variables"); return(vars); }
private static IDictionary <string, string> ReadBranchInfo(BuildTargetContext c, string path) { var lines = File.ReadAllLines(path); var dict = new Dictionary <string, string>(); c.Verbose("Branch Info:"); foreach (var line in lines) { if (!line.Trim().StartsWith("#") && !string.IsNullOrWhiteSpace(line)) { var splat = line.Split(new[] { '=' }, 2); dict[splat[0]] = splat[1]; c.Verbose($" {splat[0]} = {splat[1]}"); } } return(dict); }