我试图得到其下的项目和文件夹列表。 我能拿到项目,并使用项目项:
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\\
}
你可以使用EnvDTE.Constants.vsProjectItemKindPhysicalFolder
比较ProjectItem.Kind
侵犯财产。
更多常量可以在这里找到: http://msdn.microsoft.com/library/vstudio/envdte.constants
您可以使用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
}
}
}
编辑:正如我在评论中提及,我张贴,上面是SolutionFolders这是一个Project.Kind而非ProjectItem.Kind后实现。 关于GUIDS,微软说:
项目或项目项的Kind属性不返回一个枚举值(因为.NET必须适应由第三方提供的项目种类)。 因此,Kind属性返回一个唯一的GUID字符串身份的那种。 扩展性模型提供了一些这些GUID通过几个组件和类(EnvDTE.Constants,VSLangProj.PrjKind,VSLangProj2.PrjKind2等)分散的,但有时你必须猜测值和硬编码他们。
从http://support.microsoft.com/kb/555561 。 正如我在评论说,希望的GUID类项目项“文件夹”是一刀切相同。 你只需要确定这个GUID和硬编码。