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;
    }