2016-08-03 8 views
5

Hallo Ich habe ein Problem, mit einer benutzerdefinierten Build-Aufgabe innerhalb einer Visual Studio-Erweiterung. Ich muss Projekte meines benutzerdefinierten Projekttyps identifizieren. Ich kann das gut machen, wenn sie auf der Wurzel der Lösung sind, aber das Problem tritt auf, wenn es in einem Lösungsordner ist. Ich kann den Lösungsordner als EnvDTE.Project abrufen, bin mir aber nicht sicher, wie ich Projekte aus diesem Ordner herausbekomme.Wie bekomme ich Projekt innerhalb des Lösungsordners im VSIX-Projekt

Ich dachte, ich wäre in der Lage, es aus dem Projekt Collection-Eigenschaft zu bekommen, aber das ist null.

Jede Hilfe wäre sehr willkommen.

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 
      } 

Antwort

10

Ich schaffte es, dies mit ein wenig mehr Forschung und ein wenig Versuch und Irrtum zu lösen. Für den Fall, jemand anderes mit diesem Problem aufkommt, änderte ich den Hauptcode

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

Der Code für die GetSolutionFolderForProjects

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

hoffe, das hilft jemand.

+0

Danke Dave - Ich habe diese nützliche für meine v6 dev Arbeit gefunden –

+0

Great job Dave, schätzen die Beinarbeit auf diesem! – dprothero

Verwandte Themen