static void FillProjectItems(List<FileData> list, EnvDTE.ProjectItems projectItems, CancellationToken? cancelToken = null) { if (null != projectItems) { var projectItemsIte = projectItems.GetEnumerator(); while (projectItemsIte.MoveNext()) //foreach (EnvDTE.ProjectItem projectItem in projectItems) { var projectItem = (EnvDTE.ProjectItem)projectItemsIte.Current; if (cancelToken.HasValue && cancelToken.Value.IsCancellationRequested) { return; } if (Guid.Parse(projectItem.Kind) == VSConstants.GUID_ItemType_PhysicalFile) { /*string fullPath; if (Utils.DteHelper.GetPropertyString(projectItem.Properties, "FullPath", out fullPath)) { list.Add(new FileData(fullPath, projectItem.ContainingProject.Name)); } else { System.Diagnostics.Debug.WriteLine(projectItem.Name); }*/ list.Add(new FileData(projectItem.FileNames[0], projectItem.ContainingProject.Name)); } FillProjectItems(list, projectItem.ProjectItems, cancelToken); if (null != projectItem.SubProject) { FillProjectItems(list, projectItem.SubProject.ProjectItems, cancelToken); } } } }
public string FindProject(EnvDTE.UIHierarchyItems h, Project p) { var xEnumerator = h.GetEnumerator(); while (xEnumerator.MoveNext()) { UIHierarchyItem xHierarchyItem = (UIHierarchyItem)xEnumerator.Current; if (xHierarchyItem.Name == p.Name) { dynamic node = xHierarchyItem.Object; dynamic nodeArg = p.Object; // Cosmos.VS.Package.VSProjectNode try { if (node.Object.Project.ProjectIDGuid == nodeArg.ProjectIDGuid) return p.Name; } catch { } try { if (node.Project.ProjectIDGuid == nodeArg.ProjectIDGuid) return p.Name; } catch { } } var xPartOfName = FindProject(xHierarchyItem.UIHierarchyItems, p); if (xPartOfName.Length > 0) { SolutionClass solution = xHierarchyItem.Object as SolutionClass; if (solution != null) return xHierarchyItem.Name + "\\" + xPartOfName; return xHierarchyItem.Name + "\\" + xPartOfName; } } return string.Empty; }