private async Task <AdhocWorkspace> BuildAsync(SolutionSource solutionSource) { var loader = new ProjectLoader(_fileSystem); foreach (var project in solutionSource.Projects.ToArray()) { if (!await loader.LoadAsync(project)) { solutionSource.Projects.Remove(project); } } var projects = solutionSource.Projects.ToList(); while (projects.Count > 0) { var validProjects = projects .Where(p => p.ProjectReferences.All(_projectInfos.ContainsKey)) .ToArray(); foreach (var project in validProjects) { var info = CreateProjectInfo(project); _projectInfos.Add(project.Path, info); projects.Remove(project); } } var workspace = new AdhocWorkspace(); var solutionInfo = SolutionInfo.Create(SolutionId.CreateNewId(), VersionStamp.Default, solutionSource.FilePath, _projectInfos.Values); workspace.AddSolution(solutionInfo); return(workspace); }
private SolutionSource ParseLines(string filePath, string[] lines) { var solution = new SolutionSource(filePath); foreach (var line in lines.Where(l => !string.IsNullOrWhiteSpace(l))) { if (line.StartsWith("Project")) { if (_projectLineParser.TryParseLine(line, out var project)) { solution.Projects.Add(project); } } } return solution; }