2013-01-11 21 views
2

我想獲取項目和文件夾下的列表。我能夠獲得使用項目和項目項:如何獲取項目下的文件夾?

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

您可以使用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,微軟稱:

Project或ProjectItem的Kind屬性不返回枚舉值(因爲.NET必須適應由第三方提供的項目種類)。所以,Kind屬性返回一個唯一的GUID字符串來標識類型。可擴展性模型提供了一些通過幾個程序集和類(EnvDTE.Constants,VSLangProj.PrjKind,VSLangProj2.PrjKind2等)分散的GUID,但有時候您需要猜測值並硬編碼它們。

http://support.microsoft.com/kb/555561。正如我在評論中所說的,希望ProjectItem的Kind文件夾的GUID是一樣的。你只需要確定這個GUID並對其進行硬編碼。

+0

我剛剛注意到,我所提供的解決方案是可從常規文件夾有不同的GUID SolutionFolders。但是,我希望常規文件夾共享相同的GUID,如果與SolutionFolder GUID不同,則可以使用您的解決方法來獲取常量並將其存儲爲常量。 – thudbutt

相關問題