private void CreateHierarchy(SlnProject project) { FileInfo fileInfo = new FileInfo(project.FullPath); DirectoryInfo directoryInfo = fileInfo.Directory; if (_pathToSlnFolderMap.TryGetValue(directoryInfo.FullName, out SlnFolder childFolder)) { childFolder.Projects.Add(project); return; } childFolder = new SlnFolder(directoryInfo.FullName); childFolder.Projects.Add(project); _pathToSlnFolderMap.Add(directoryInfo.FullName, childFolder); directoryInfo = directoryInfo.Parent; while (!string.Equals(directoryInfo.FullName, _rootFolder.FullPath, StringComparison.OrdinalIgnoreCase)) { if (!_pathToSlnFolderMap.TryGetValue(directoryInfo.FullName, out SlnFolder folder1)) { folder1 = new SlnFolder(directoryInfo.FullName); _pathToSlnFolderMap.Add(directoryInfo.FullName, folder1); } childFolder.Parent = folder1; if (!folder1.Folders.Contains(childFolder)) { folder1.Folders.Add(childFolder); } directoryInfo = directoryInfo.Parent; childFolder = folder1; } if (!_rootFolder.Folders.Contains(childFolder)) { _rootFolder.Folders.Add(childFolder); childFolder.Parent = _rootFolder; } }