2016-08-03 7 views
5

안녕하세요 Visual Studio Extension의 사용자 지정 빌드 작업에 문제가 있습니다. 맞춤 프로젝트 유형의 프로젝트를 식별해야합니다. 솔루션의 루트에있는 경우이 작업을 제대로 수행 할 수 있지만 솔루션 폴더 안에있을 때 문제가 발생합니다. EnvDTE.Project로 솔루션 폴더를 가져올 수 있지만 해당 폴더 내에서 프로젝트를 가져 오는 방법을 모르겠습니다.VSIX 프로젝트의 솔루션 폴더 내부에서 프로젝트를 얻는 방법

프로젝트 컬렉션 속성에서 가져올 수있을 것이라고 생각했지만 null입니다.

도움을 주시면 감사하겠습니다.

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

나는 약간의 연구와 시행 착오로 이것을 해결할 수 있었다. 경우 다른 사람이이 문제와 함께 제공에서, 나는 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; 
} 

이 다른 사람 도움이되기를 바랍니다이었다

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

메인 코드를 변경했습니다.

+0

감사합니다. Dave - 내 v6 개발자의 작업에 유용하다는 것을 확실히 알았습니다. –

+0

Dave, 이것에 대해 감사드립니다. – dprothero