public static bool TryParseExistingSolution()

in src/Microsoft.VisualStudio.SlnGen/SlnFile.cs [236:322]


        public static bool TryParseExistingSolution(string path, out Guid solutionGuid, out IReadOnlyDictionary<string, Guid> projectGuidsByPath)
        {
            solutionGuid = default;
            projectGuidsByPath = default;

            bool foundSolutionGuid = false;

            Dictionary<string, Guid> projectGuids = new Dictionary<string, Guid>(StringComparer.OrdinalIgnoreCase);

            FileInfo fileInfo = new FileInfo(path);

            if (!fileInfo.Exists || fileInfo.Directory == null)
            {
                return false;
            }

            using FileStream stream = File.OpenRead(path);
            using StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(0), detectEncodingFromByteOrderMarks: true);

            string line;

            while ((line = reader.ReadLine()) != null)
            {
                if (line.StartsWith(ProjectSectionStart))
                {
                    string[] projectDetails = line.Split(ProjectSectionSeparator, StringSplitOptions.RemoveEmptyEntries);

                    if (projectDetails.Length == 3)
                    {
                        Match projectGuidMatch = GuidRegex.Match(projectDetails[2]);

                        if (!projectGuidMatch.Groups["Guid"].Success)
                        {
                            continue;
                        }

                        string projectGuidString = projectGuidMatch.Groups["Guid"].Value;

                        Match projectTypeGuidMatch = GuidRegex.Match(projectDetails[0]);

                        if (!projectTypeGuidMatch.Groups["Guid"].Success)
                        {
                            continue;
                        }

                        if (!Guid.TryParse(projectGuidString, out Guid projectGuid) || !Guid.TryParse(projectTypeGuidMatch.Groups["Guid"].Value, out Guid projectTypeGuid))
                        {
                            continue;
                        }

                        string projectPath = projectDetails[1].Trim().Trim('\"');

                        projectGuids[projectPath] = projectGuid;
                    }

                    while ((line = reader.ReadLine()) != null)
                    {
                        if (line.StartsWith(ProjectSectionEnd))
                        {
                            break;
                        }
                    }
                }

                if (line != null && line.StartsWith(GlobalSectionStartExtensibilityGlobals))
                {
                    while ((line = reader.ReadLine()) != null)
                    {
                        if (line.StartsWith(SectionSettingSolutionGuid))
                        {
                            string solutionGuidString = line.Substring(SectionSettingSolutionGuid.Length);

                            foundSolutionGuid = Guid.TryParse(solutionGuidString, out solutionGuid);
                        }

                        if (line.StartsWith(GlobalSectionEnd))
                        {
                            break;
                        }
                    }
                }
            }

            projectGuidsByPath = projectGuids;

            return foundSolutionGuid;
        }