我正在尝试获取其下的项目和文件夹列表。我可以使用以下方式获取项目和项目项目:
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\\
}
答案 0 :(得分:13)
您可以使用EnvDTE.Constants.vsProjectItemKindPhysicalFolder
来比较ProjectItem.Kind
属性。
更多常量可以在这里找到:http://msdn.microsoft.com/library/vstudio/envdte.constants
答案 1 :(得分:4)
您可以使用ProjectKinds.vsProjectKindSolutionFolder
查看项目是否为文件夹。
e.g。
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
}
}
}
编辑:正如我的评论中所提到的,我在发布之后意识到上面是针对SolutionFolders而不是ProjectItem.Kind。关于GUIDS,微软说:
Project或ProjectItem的Kind属性不返回枚举值(因为.NET必须包含第三方提供的项目类型)。因此,Kind属性返回唯一的GUID字符串以标识该类型。可扩展性模型提供了一些分散在几个程序集和类中的GUID(EnvDTE.Constants,VSLangProj.PrjKind,VSLangProj2.PrjKind2等),但有时你必须猜测它们并对它们进行硬编码。
来自http://support.microsoft.com/kb/555561。正如我在评论中所说的那样,希望ProjectItem of Kind“文件夹”的GUID是全面的。您只需要确定此GUID并对其进行硬编码。