public Solution Parse(string path) { var projects = new List <Project>(); var lines = _fileReader.ReadAllLines(path); foreach (var line in lines) { var baseDirectory = _pathReader.GetDirectoryName(path); var match = Regex.Match(line, PROJECT_INCLUDE_REGEX); if (match.Success) { var result = match.Value.Split('"')[5]; while (result.Contains(FOLDER_UP_ONE_LEVEL)) { var index = result.IndexOf(FOLDER_UP_ONE_LEVEL, StringComparison.Ordinal); result = result.Remove(index, FOLDER_UP_ONE_LEVEL.Length); baseDirectory = _directoryReader.GetParent(baseDirectory); } Debug.Assert(baseDirectory != null, nameof(baseDirectory) + " != null"); result = _pathReader.Combine(baseDirectory, result); projects.Add(new Project(result, null)); } } var solution = new Solution(path) { Projects = projects }; return(solution); }