Я никогда не писал макросов для Visual Studio, но это может быть то, что вы ищете.
projectName = DTE.Solution.SolutionBuild.StartupProjects(0)
For Each project In DTE.Solution.Projects
If (project.ConfigurationManager IsNot Nothing) Then
' It's a project!
If (project.UniqueName = projectName) Then Return project
Else
If (project.ProjectItems IsNot Nothing) Then
For Each projectItem In project.ProjectItems
If (projectItem.SubProject IsNot Nothing) Then
' TODO: Recurse on projectItem.SubProject
End If
Next
End If
End If
Next
Я оставил там 'TODO', потому что вам действительно нужно было бы извлечь это вфункция, которую вы можете вызывать рекурсивно, если вы хотите иметь дело с вложенными (под) проектами.
Я получил это решение от по этой ссылке , и хотя это материал эпохи Visual Studio 2005,это может привести вас в правильном направлении.