From cbc6392868916b3e40425fb9e3bad5dcac558c2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Wagenf=C3=BChr?= Date: Fri, 24 Sep 2021 10:36:04 +0200 Subject: [PATCH] Fix issue with determining SolutionProject File --- .../Helper/EnrichSolutionWithProjects.cs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/SlnParser/Helper/EnrichSolutionWithProjects.cs b/src/SlnParser/Helper/EnrichSolutionWithProjects.cs index 268c109..6f3cdee 100644 --- a/src/SlnParser/Helper/EnrichSolutionWithProjects.cs +++ b/src/SlnParser/Helper/EnrichSolutionWithProjects.cs @@ -25,18 +25,18 @@ public void Enrich(Solution solution, IEnumerable fileContents) if (fileContents == null) throw new ArgumentNullException(nameof(fileContents)); var fileContentsList = fileContents.ToList(); - var flatProjects = GetProjectsFlat(fileContentsList).ToList(); + var flatProjects = GetProjectsFlat(solution, fileContentsList).ToList(); solution.AllProjects = flatProjects.ToList().AsReadOnly(); var structuredProjects = GetProjectsStructured(fileContentsList, flatProjects); solution.Projects = structuredProjects.ToList().AsReadOnly(); } - private IEnumerable GetProjectsFlat(IEnumerable fileContents) + private IEnumerable GetProjectsFlat(Solution solution, IEnumerable fileContents) { var flatProjects = new Collection(); foreach (var line in fileContents) - ProcessLine(line, flatProjects); + ProcessLine(solution, line, flatProjects); return flatProjects; } @@ -53,7 +53,10 @@ private static IEnumerable GetProjectsStructured( return structuredProjects; } - private void ProcessLine(string line, ICollection flatProjectList) + private void ProcessLine( + Solution solution, + string line, + ICollection flatProjectList) { if (!line.StartsWith("Project(\"{")) return; @@ -69,7 +72,13 @@ private void ProcessLine(string line, ICollection flatProjectList) var projectTypeGuid = Guid.Parse(projectTypeGuidString); var projectGuid = Guid.Parse(projectGuidString); - var projectFile = new FileInfo(projectPath); + + var solutionDirectory = Path.GetDirectoryName(solution.File.FullName); + if (solutionDirectory == null) + throw new UnexpectedSolutionStructureException("Solution-Directory could not be determined"); + + var projectFileCombinedWithSolution = Path.Combine(solutionDirectory, projectPath); + var projectFile = new FileInfo(projectFileCombinedWithSolution); var projectType = _projectTypeMapper.Map(projectTypeGuid);