2013-01-11 1 views
2

J'essaie d'obtenir une liste de projets et de dossiers en dessous. Je suis en mesure d'obtenir les projets et projets-éléments à l'aide:Comment obtenir des dossiers sous projets?

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

Ensuite, je suis à travers les articles itérer du projet et obtenir le « genre » de l'article. Mais il montre seulement GUID. J'ai besoin de savoir si l'article est un dossier. Comment je fais ça?

Ref:

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

EDIT:

Actuellement, je suis en utilisant une solution de contournement:

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

Répondre

4

Vous pouvez utiliser ProjectKinds.vsProjectKindSolutionFolder pour voir si le projet est un dossier ou non.

par exemple.

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

EDIT: Comme mentionné dans mon commentaire, je me suis rendu après la publication que ce qui précède pour SolutionFolders qui sont un Project.Kind plutôt qu'un ProjectItem.Kind. En ce qui concerne le GUIDS, Microsoft dire:

La propriété Kind de Project ou ProjectItem ne renvoie pas une valeur enum (puisque .NET doit accueillir les types de projet fournis par des tiers). Ainsi, la propriété Kind renvoie une chaîne GUID unique pour identifier le type. Le modèle d'extensibilité fournit certains de ces GUID dispersés à travers plusieurs assemblées et classes (EnvDTE.Constants, VSLangProj.PrjKind, VSLangProj2.PrjKind2, etc.) mais parfois vous devrez deviner les valeurs et les coder en dur.

De http://support.microsoft.com/kb/555561. Comme je l'ai dit dans le commentaire, j'espère que le GUID pour un ProjectItem de type "Dossier" est le même partout. Vous avez juste besoin de déterminer ce GUID et le coder en dur.

+0

Je viens de remarquer que la solution que j'ai fourni est pour SolutionFolders qui peuvent avoir un GUID différent de dossiers réguliers. Cependant, je m'attendrais à ce que les dossiers ordinaires partagent le même GUID qui, s'il est différent du GUID de SolutionFolder, vous pouvez utiliser cette solution de contournement pour obtenir, puis stocker en tant que constante. – thudbutt

Questions connexes