Beispiel #1
0
 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;
 }
Beispiel #2
0
        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;
        }