public static VSSolution Load(string fileName) { //Log.DebugFormat("Load ('{0}')", fileName); VSSolution solution = new VSSolution(fileName); using (Stream stream = File.Open(fileName, FileMode.Open, FileAccess.Read)) { using (StreamReader reader = new StreamReader(stream)) { VSSolutionFileParser parser = new VSSolutionFileParser(reader); string line = parser.NextLine(); Match solutionMatch = RegexSolutionVersion.Match(line); if (solutionMatch.Success == false) { parser.ThrowParserException("Not a solution file."); } solution.solutionVersion = decimal.Parse( solutionMatch.Groups["version"].Value, CultureInfo.InvariantCulture); while (true) { try { line = parser.NextLine(); if (line == null) { break; } //salimos del loop cuando 'Global' aparece Match globalMatch = RegexGlobal.Match(line); if (globalMatch.Success) { break; } Match projectMatch = RegexProject.Match(line); if (projectMatch.Success == false) { parser.ThrowParserException( String.Format( CultureInfo.InvariantCulture, "Could not parse solution file (line {0}).", parser.LineCount)); } Guid projectGuid = new Guid(projectMatch.Groups["projectGuid"].Value); string projectName = projectMatch.Groups["name"].Value; string projectFileName = projectMatch.Groups["path"].Value; Guid projectTypeGuid = new Guid(projectMatch.Groups["projectTypeGuid"].Value); if (projectFileName.ToLower().Contains("http://")) { string path = System.IO.Path.GetDirectoryName(fileName); Uri r = new Uri(projectFileName); string f = ""; f = r.Segments[r.Segments.Length - 1]; path = System.IO.Directory.GetParent(path).FullName; string[] files = System.IO.Directory.GetFiles(path, f, SearchOption.AllDirectories); if (files != null && files.Length > 0) { projectFileName = files[files.Length - 1]; } } try { VSProjectInfo project; if (projectTypeGuid == VSProjectType.SolutionFolderProjectType.ProjectTypeGuid) { project = new VSSolutionFilesInfo( solution, projectGuid, projectName, projectTypeGuid); } else { project = new VSProjectWithFileInfo( solution, projectGuid, projectName, projectFileName, projectTypeGuid); } project.Parse(parser); solution.projects.Add(project); } catch (Exception ex) { //Asumimos el error. Si falla posiblemente se trate de un proyecto de setup o no regular } } catch (Exception ex) { //Asumimos el error. Si falla posiblemente se trate de un proyecto de setup o no regular } } } } return(solution); }
/// <summary> /// Loads the specified VisualStudio solution file and returns a <see cref="VSSolution"/> representing the solution. /// </summary> /// <param name="fileName">The name of the solution file.</param> /// <returns>A <see cref="VSSolution"/> representing the solution.</returns> public static VSSolution Load(string fileName) { Log.DebugFormat("Load ('{0}')", fileName); VSSolution solution = new VSSolution(fileName); using (Stream stream = File.Open(fileName, FileMode.Open, FileAccess.Read)) { using (StreamReader reader = new StreamReader(stream)) { VSSolutionFileParser parser = new VSSolutionFileParser(reader); string line = parser.NextLine(); Match solutionMatch = RegexSolutionVersion.Match(line); if (solutionMatch.Success == false) { parser.ThrowParserException("Not a solution file."); } solution.solutionVersion = decimal.Parse( solutionMatch.Groups["version"].Value, CultureInfo.InvariantCulture); while (true) { line = parser.NextLine(); if (line == null) { break; } // exit the loop when 'Global' section appears Match globalMatch = RegexGlobal.Match(line); if (globalMatch.Success) { break; } Match projectMatch = RegexProject.Match(line); if (projectMatch.Success == false) { parser.ThrowParserException( String.Format( CultureInfo.InvariantCulture, "Could not parse solution file (line {0}).", parser.LineCount)); } Guid projectGuid = new Guid(projectMatch.Groups["projectGuid"].Value); string projectName = projectMatch.Groups["name"].Value; string projectFileName = projectMatch.Groups["path"].Value; Guid projectTypeGuid = new Guid(projectMatch.Groups["projectTypeGuid"].Value); VSProjectInfo project; if (projectTypeGuid == VSProjectType.SolutionFolderProjectType.ProjectTypeGuid) { project = new VSSolutionFilesInfo( solution, projectGuid, projectName, projectTypeGuid); } else { project = new VSProjectWithFileInfo( solution, projectGuid, projectName, projectFileName, projectTypeGuid); } solution.projects.Add(project); project.Parse(parser); } } } return(solution); }