public static void RemoveEmptySolutionFolders(this SlnFile slnFile) { var solutionFolderProjects = slnFile.Projects .GetProjectsByType(ProjectTypeGuids.SolutionFolderGuid) .ToList(); if (solutionFolderProjects.Any()) { var nestedProjectsSection = slnFile.Sections.GetSection( "NestedProjects", SlnSectionType.PreProcess); if (nestedProjectsSection == null) { foreach (var solutionFolderProject in solutionFolderProjects) { if (solutionFolderProject.Sections.Count() == 0) { slnFile.Projects.Remove(solutionFolderProject); } } } else { var solutionFoldersInUse = slnFile.GetSolutionFoldersThatContainProjectsInItsHierarchy( nestedProjectsSection.Properties); solutionFoldersInUse.UnionWith(slnFile.GetSolutionFoldersThatContainSolutionItemsInItsHierarchy( nestedProjectsSection.Properties)); foreach (var solutionFolderProject in solutionFolderProjects) { if (!solutionFoldersInUse.Contains(solutionFolderProject.Id)) { nestedProjectsSection.Properties.Remove(solutionFolderProject.Id); if (solutionFolderProject.Sections.Count() == 0) { slnFile.Projects.Remove(solutionFolderProject); } } } if (nestedProjectsSection.IsEmpty) { slnFile.Sections.Remove(nestedProjectsSection); } } } }