The existing GetAllProjects() function needs to be replaced. Below is a working fix-
```
//public EnvDTE.Projects GetAllProjects()
//{
// return GetSolution().Projects;
//}
public IEnumerable<EnvDTE.Project> GetAllProjects()
{
foreach(var projectObj in GetSolution().Projects)
{
var project = projectObj as EnvDTE.Project;
if(project == null)
continue;
if(project.Kind == EnvDTE.Constants.vsProjectKindSolutionItems)
foreach(var p in RecurseSolutionFolder(project))
yield return p;
else
yield return project;
}
}
private IEnumerable<EnvDTE.Project> RecurseSolutionFolder(EnvDTE.Project project)
{
if(project.ProjectItems != null)
foreach(EnvDTE.ProjectItem projectItem in project.ProjectItems)
{
var subProject = projectItem.SubProject as EnvDTE.Project;
if(subProject == null)
continue;
if(subProject.Kind == EnvDTE.Constants.vsProjectKindSolutionItems)
foreach(var p in RecurseSolutionFolder(subProject))
yield return p;
else
yield return subProject;
}
}
```
Comments: Many thanks. Will be in next release.
```
//public EnvDTE.Projects GetAllProjects()
//{
// return GetSolution().Projects;
//}
public IEnumerable<EnvDTE.Project> GetAllProjects()
{
foreach(var projectObj in GetSolution().Projects)
{
var project = projectObj as EnvDTE.Project;
if(project == null)
continue;
if(project.Kind == EnvDTE.Constants.vsProjectKindSolutionItems)
foreach(var p in RecurseSolutionFolder(project))
yield return p;
else
yield return project;
}
}
private IEnumerable<EnvDTE.Project> RecurseSolutionFolder(EnvDTE.Project project)
{
if(project.ProjectItems != null)
foreach(EnvDTE.ProjectItem projectItem in project.ProjectItems)
{
var subProject = projectItem.SubProject as EnvDTE.Project;
if(subProject == null)
continue;
if(subProject.Kind == EnvDTE.Constants.vsProjectKindSolutionItems)
foreach(var p in RecurseSolutionFolder(subProject))
yield return p;
else
yield return subProject;
}
}
```
Comments: Many thanks. Will be in next release.