2016-08-03 44 views
5

में समाधान फ़ोल्डर के अंदर प्रोजेक्ट कैसे प्राप्त करें हाय मुझे विजुअल स्टूडियो एक्सटेंशन के अंदर एक कस्टम बिल्ड कार्य के साथ समस्या है। मुझे अपने कस्टम प्रोजेक्ट प्रकार की परियोजनाओं की पहचान करने की आवश्यकता है। अगर वे समाधान की जड़ पर हैं तो मैं यह ठीक कर सकता हूं, लेकिन समस्या तब होती है जब यह समाधान फ़ोल्डर के अंदर होती है। मैं समाधान फ़ोल्डर को EnvDTE.Project के रूप में प्राप्त कर सकता हूं, लेकिन मुझे यकीन नहीं है कि उस फ़ोल्डर के भीतर से परियोजनाएं कैसे प्राप्त करें।वीएसआईएक्स प्रोजेक्ट

मैंने सोचा कि मैं इसे प्रोजेक्ट संग्रह संपत्ति से प्राप्त कर पाऊंगा लेकिन यह शून्य है।

किसी भी सहायता की सराहना की जाएगी।

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 
      } 

उत्तर

10

मैं इसे थोड़ा और अनुसंधान और कुछ परीक्षण और त्रुटि के साथ हल करने में कामयाब रहा। में किसी और मामले किसी को भी इस समस्या के साथ आता है, मैं

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

करने के लिए मुख्य कोड बदल GetSolutionFolderForProjects के लिए कोड

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

आशा इस मदद करता है किसी और को किया गया था।

+0

धन्यवाद डेव - मुझे निश्चित रूप से यह मेरे v6 dev work –

+0

ग्रेट जॉब डेव के लिए उपयोगी पाया गया है, इस पर लेगवर्क की सराहना करें! – dprothero

संबंधित मुद्दे