public static PdbSrcSrvSection Parse(string text) { if (string.IsNullOrEmpty(text)) return null; var result = new PdbSrcSrvSection(); string ini = text.Remove(0, text.IndexOf(SrcSrvIni, System.StringComparison.Ordinal) + SrcSrvIni.Length); ini = ini.Remove(ini.IndexOf(SrcSrvVariables, System.StringComparison.Ordinal)).Trim(); string variables = text.Remove(0, text.IndexOf(SrcSrvVariables, System.StringComparison.Ordinal) + SrcSrvVariables.Length); variables = variables.Remove(variables.IndexOf(SrcSrvSources, System.StringComparison.Ordinal)).Trim(); string sources = text.Remove(0, text.IndexOf(SrcSrvSources, System.StringComparison.Ordinal) + SrcSrvSources.Length); sources = sources.Remove(sources.IndexOf(SrcSrvEnd, System.StringComparison.Ordinal)).Trim(); foreach (string line in ini.Split('\n').Select(l => l.Trim()).Where(l => !string.IsNullOrEmpty(l))) result.Ini.Add(line.Remove(line.IndexOf("=", System.StringComparison.Ordinal)), line.Substring(line.IndexOf("=", System.StringComparison.Ordinal) + 1)); foreach (string line in variables.Split('\n').Select(l => l.Trim()).Where(l => !string.IsNullOrEmpty(l))) result.Variables.Add(line.Remove(line.IndexOf("=", System.StringComparison.Ordinal)), line.Substring(line.IndexOf("=", System.StringComparison.Ordinal) + 1)); foreach (string line in sources.Split('\n').Select(l => l.Trim()).Where(l => !string.IsNullOrEmpty(l))) result.Sources.Add(new List<string>(line.Split('*'))); return result; }
private static PdbSrcSrvSection CreatePdbSrcSrvSection(Project currentProject, PdbStoreManager pdbStoreManager, string pdbFile) { var srcSrvSection = new PdbSrcSrvSection(); srcSrvSection.Ini.Add("VERSION", "2"); srcSrvSection.Ini.Add("INDEXVERSION", "2"); srcSrvSection.Ini.Add("DATETIME", DateTime.Now.ToString(CultureInfo.InvariantCulture)); srcSrvSection.Variables.Add("SRCSRVTRG", "%var2%"); var sourceList = GetSourceList(currentProject, pdbStoreManager, pdbFile); foreach (var source in sourceList){ srcSrvSection.Sources.Add(new[]{source}); } return srcSrvSection; }
public string WriteSrcSrv(string pdbFilePath, PdbSrcSrvSection srcSrvSection) { string tempFile = Path.GetTempFileName(); var currentDirectory = Environment.CurrentDirectory; try{ File.WriteAllText(tempFile, srcSrvSection.ToString()); Environment.CurrentDirectory = Path.GetDirectoryName(PdbStrPath())+""; var processStartInfo = new ProcessStartInfo{ FileName = Path.Combine(Environment.CurrentDirectory,"pdbstr.exe"), Arguments =@"-w -p:""" +pdbFilePath + @""" -i:""" + tempFile+@""" -s:srcsrv", UseShellExecute = false,CreateNoWindow = true,RedirectStandardOutput = true }; using (var pdbstrProcess=new Process{StartInfo = processStartInfo}){ pdbstrProcess.Start(); string result = pdbstrProcess.StandardOutput.ReadToEnd(); pdbstrProcess.WaitForExit(); return result; } } finally{ Environment.CurrentDirectory=currentDirectory; File.Delete(tempFile); } }