3

我正在尝试获取其下的项目和文件夹列表。我可以使用以下方式获取项目和项目项:

DTE2 dte2;
dte2=(DTE2)System.Runtime.InteropServices.Marshal.
GetActiveObject("VisualStudio.DTE.10.0");
Projects projects = dte2.Solution.Projects;

然后,我正在遍历项目项目并获得项目的“种类”。但它只显示 GUID。我需要知道该项目是否是文件夹。我怎么做?

参考:

var item = projects.GetEnumerator();
while (item.MoveNext())
{
  var project = item.Current as Project;
  for(i=1;i<project.ProjectItems.Count;i++)
  {
     string itemType = project.ProjectItems.Item(i).Kind;
  }
}

编辑 :

目前,我正在使用一种解决方法:

string location = project.ProjectItems.Item(i).get_FileNames(1);
if (location.EndsWith(@"\"))
        {
            // It is a folder E.g C:\\Abc\\Xyz\\
        }
4

2 回答 2

14

您可以EnvDTE.Constants.vsProjectItemKindPhysicalFolder用来比较ProjectItem.Kind属性。

更多常量可以在这里找到:http: //msdn.microsoft.com/library/vstudio/envdte.constants

于 2013-09-11T11:11:51.283 回答
4

您可以使用ProjectKinds.vsProjectKindSolutionFolder来查看项目是否为文件夹。

例如

var item = projects.GetEnumerator();
while (item.MoveNext())
{
  var project = item.Current as Project;
  for(i=1;i<project.ProjectItems.Count;i++)
  {
     string itemType = project.ProjectItems.Item(i).Kind;
     if (itemType  == ProjectKinds.vsProjectKindSolutionFolder)
     {
         // Do whatever
     }
  }
}

编辑:正如我在评论中提到的,我在发布后意识到上面是针对解决方案文件夹的,它是 Project.Kind 而不是 ProjectItem.Kind。关于 GUIDS,微软说:

Project 或 ProjectItem 的 Kind 属性不返回枚举值(因为 .NET 必须适应第 3 方提供的项目种类)。因此,Kind 属性返回一个唯一的 GUID 字符串来标识该种类。可扩展性模型提供了一些分散在多个程序集和类(EnvDTE.Constants、VSLangProj.PrjKind、VSLangProj2.PrjKind2 等)中的这些 GUID,但有时您必须猜测值并对它们进行硬编码。

来自http://support.microsoft.com/kb/555561。正如我在评论中所说,希望“文件夹”类型的 ProjectItem 的 GUID 是相同的。您只需要确定此 GUID 并对其进行硬编码。

于 2013-01-12T08:03:45.920 回答