public static SolutionStructure GetProjectStructureRecursive(DTE dte) { EnvDTE.Solution solution = dte.Solution; EnvDTE.Projects solutionProjects = solution.Projects; List <Guid> guids = new List <Guid>(); SolutionStructure projectStructure = new SolutionStructure(); foreach (Project project in solutionProjects) { try { if (project.Kind == EnvDTE.Constants.vsProjectKindUnmodeled) // not loaded { continue; } // check it's a c/c++ project if (project.CodeModel != null) { if (project.CodeModel.Language != CodeModelLanguageConstants.vsCMLanguageVC) { continue; } } if (project.Kind == "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") { SolutionStructure.ProjectNode projectNode = new SolutionStructure.ProjectNode(); projectNode.Name = project.Name; projectNode.Project = project; projectNode.Include = false; projectStructure.Nodes.Add(projectNode); } else { SolutionStructure.Node folderNode = GetSubProjects(project); if (folderNode != null) { projectStructure.Nodes.Add(folderNode); } else { Logging.Logging.LogWarning("Subnode was NULL"); } } } catch (Exception e) { Logging.Logging.LogError("Exception: " + e.Message); } } return(projectStructure); }
private static SolutionStructure.Node GetSubProjects(EnvDTE.Project project) { ProjectItems projectItems = project.ProjectItems; List <Project> items = new List <Project>(); try { foreach (ProjectItem item in projectItems) { Project p = item.Object as Project; if (p != null) { items.Add(p); } } if (items.Count > 0) { SolutionStructure.FolderNode folderNode = new SolutionStructure.FolderNode(); folderNode.Name = project.Name; for (int i = 0; i < items.Count; i++) { Project item = items[i]; SolutionStructure.Node subFolderNode = GetSubProjects(item); if (subFolderNode != null) { folderNode.SubNodes.Add(subFolderNode); } else { Logging.Logging.LogWarning("SubNode was NULL"); } } return(folderNode); } else { SolutionStructure.ProjectNode projectNode = new SolutionStructure.ProjectNode(); projectNode.Name = project.Name; projectNode.Project = project; projectNode.Include = false; return(projectNode); } } catch (Exception e) { Logging.Logging.LogError("Exception: " + e.Message); return(null); } }