C# EnvDTE在解决方案中迭代子文件夹

C# EnvDTE在解决方案中迭代子文件夹,c#,subdirectory,envdte,C#,Subdirectory,Envdte,在VS解决方案中具有以下结构: 现在,我想获取对“Catalogs”文件夹的引用,并将其存储在变量中: //Solution_Name // ConfigurationObjects // Catalogs // Documents foreach (Project item1 in AttachedSolution.Projects) { if (item1.Ki

在VS解决方案中具有以下结构:

现在,我想获取对“Catalogs”文件夹的引用,并将其存储在变量中:

        //Solution_Name
        //    ConfigurationObjects
        //        Catalogs
        //        Documents

    foreach (Project item1 in AttachedSolution.Projects)
    {
        if (item1.Kind == ProjectKinds.vsProjectKindSolutionFolder)
        {
            if (item1.Name == "ConfigurationObjects")
            {
                SolutionFolder catalogBaseFolder = (SolutionFolder)item1.Object;

                foreach (ProjectItem item2 in item1.ProjectItems)
                {
                    if ( item2.Name == "Catalogs")
                    {
                        this.CatalogObjectsFolder = (SolutionFolder)item2;
                    // raises error here: Unable to cast COM object of type                   
                    //'System.__ComObject' 
                    //to interface type 'EnvDTE80.SolutionFolder'.
                    };
                };
            };
        };
    };

感谢您的帮助。

非第一级的解决方案文件夹将建模为EnvDTE.Project,而不是EnvDTE80.SolutionFolder。可以使用projectItem.SubProject属性从projectItem获取项目。然后使用Project.Object获取EnvDTE80.SolutionFolder

见: