Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }