Do not add duplicate solution folders or project directories (#5377)
* Do not add duplicate solution folders or project directories * Fix the algorithm for removing empty solution folders * Improving code by adding description methods. To address PR comments.
This commit is contained in:
parent
6bb76cf20e
commit
b2c51b7269
10 changed files with 270 additions and 70 deletions
|
@ -126,10 +126,8 @@ namespace Microsoft.DotNet.Tools.Sln.Remove
|
|||
|
||||
private void RemoveEmptySolutionFolders(SlnFile slnFile)
|
||||
{
|
||||
var referencedSolutionFolders = slnFile.Projects.GetReferencedSolutionFolders();
|
||||
|
||||
var solutionFolderProjects = slnFile.Projects
|
||||
.Where(p => p.TypeGuid == ProjectTypeGuids.SolutionFolderGuid)
|
||||
.GetProjectsByType(ProjectTypeGuids.SolutionFolderGuid)
|
||||
.ToList();
|
||||
|
||||
if (solutionFolderProjects.Any())
|
||||
|
@ -138,9 +136,13 @@ namespace Microsoft.DotNet.Tools.Sln.Remove
|
|||
"NestedProjects",
|
||||
SlnSectionType.PreProcess);
|
||||
|
||||
var solutionFoldersInUse = GetSolutionFoldersThatContainProjectsInItsHierarchy(
|
||||
slnFile,
|
||||
nestedProjectsSection.Properties);
|
||||
|
||||
foreach (var solutionFolderProject in solutionFolderProjects)
|
||||
{
|
||||
if (!referencedSolutionFolders.Contains(solutionFolderProject.Name))
|
||||
if (!solutionFoldersInUse.Contains(solutionFolderProject.Id))
|
||||
{
|
||||
slnFile.Projects.Remove(solutionFolderProject);
|
||||
nestedProjectsSection.Properties.Remove(solutionFolderProject.Id);
|
||||
|
@ -153,5 +155,27 @@ namespace Microsoft.DotNet.Tools.Sln.Remove
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private HashSet<string> GetSolutionFoldersThatContainProjectsInItsHierarchy(
|
||||
SlnFile slnFile,
|
||||
SlnPropertySet nestedProjects)
|
||||
{
|
||||
var solutionFoldersInUse = new HashSet<string>();
|
||||
|
||||
var nonSolutionFolderProjects = slnFile.Projects.GetProjectsNotOfType(
|
||||
ProjectTypeGuids.SolutionFolderGuid);
|
||||
|
||||
foreach (var nonSolutionFolderProject in nonSolutionFolderProjects)
|
||||
{
|
||||
var id = nonSolutionFolderProject.Id;
|
||||
while (nestedProjects.ContainsKey(id))
|
||||
{
|
||||
id = nestedProjects[id];
|
||||
solutionFoldersInUse.Add(id);
|
||||
}
|
||||
}
|
||||
|
||||
return solutionFoldersInUse;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue