2016-08-03 101 views
5

Merhaba Bir Visual Studio Uzantısı içinde özel bir oluşturma görevi ile bir sorun yaşıyorum. Özel proje türümün projelerini tanımlamam gerekiyor. Çözümün kökü üzerindeyse bunu yapabilirim, ancak sorun bir çözüm klasörünün içinde olduğunda ortaya çıkar. Çözüm klasörünü EnvDTE.Project olarak alabilirim, ancak bu klasörün içinden nasıl proje alacağımı bilmiyorum.VSIX projesinde Çözüm Klasörü içinde proje nasıl oluşturulur

Koleksiyon Collection projelerinden alabileceğimi düşündüm ama bu boş.

Her türlü yardım çok takdir edilecektir.

if (Scope == EnvDTE.vsBuildScope.vsBuildScopeSolution) 
{ 
    DTE2 dte2 = Package.GetGlobalService(typeof(EnvDTE.DTE)) as DTE2; 
    var sol = dte2.Solution; 
    EnvDTE.DTE t = dte2.DTE; 
    var x = t.Solution.Projects; 
    foreach(var proj in x) 
    { 
     try 
     { 
      var project = proj as EnvDTE.Project; 
      var guid = GetProjectTypeGuids(project); 
      if (guid.Contains("FOLDERGUID")) 
      { 
       //here is where I would get the project from the folder 
      } 

cevap

10

Bunu biraz daha fazla araştırma ve deneme yanılma ile çözmeyi başardım. Başka vaka herkes bu sorunla çıkageldi, ben GetSolutionFolderForProjects için kod

private IEnumerable<Project> GetSolutionFolderProjects(Project project) 
{ 
    List<Project> projects = new List<Project>(); 
    var y = (project.ProjectItems as ProjectItems).Count; 
    for(var i = 1; i <= y; i++) 
    { 
     var x = project.ProjectItems.Item(i).SubProject; 
     var subProject = x as Project; 
     if (subProject != null) 
     { 
      //Carried out work and added projects as appropriate 
     } 
    } 

    return projects; 
} 

bu başkası yardımcı olur Umut oldu

if (Scope == EnvDTE.vsBuildScope.vsBuildScopeSolution) 
{ 
    errorListProvider.Tasks.Clear(); 
    DTE2 dte2 = Package.GetGlobalService(typeof(DTE)) as DTE2; 
    var sol = dte2.Solution; 
    var projs = sol.Projects; 
    foreach(var proj in sol) 
    { 
     var project = proj as Project; 
     if (project.Kind == ProjectKinds.vsProjectKindSolutionFolder) 
     { 
      var innerProjects = GetSolutionFolderProjects(project); 
      foreach(var innerProject in innerProjects) 
      { 
       //carry out actions here. 
      } 
     } 
    } 
} 

ana kod değiştirdi.

+0

Teşekkürler Dave - Bu v6 dev işim için kesinlikle bu yararlı buldum –

+0

Harika bir iş Dave, bu konuda ayak işi takdir! – dprothero