使用以下代码为我提供了解决方案文件夹,而不是真正的项目。
projectName = DTE.Solution.SolutionBuild.StartupProjects(0)
For Each project In DTE.Solution.Projects
If project.UniqueName = projectName Then
Return project
End If
Next
我可以循环实际的Project节点吗?
我正在尝试从启动项目中读取属性。
答案 0 :(得分:10)
我从未编写任何Visual Studio宏,但这可能就是您要找的。 p>
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,因为如果你想要处理嵌套(子)项目,你需要实际将它拉出到一个可以递归调用的函数中。
我从this link获得了这个解决方案,虽然它是Visual Studio 2005时代的材料,但它可能会让你朝着正确的方向前进。
答案 1 :(得分:2)
我想您可能想要检查VS常量,请尝试以下操作:
Private Function GetAllProjects() As Generic.List(Of Project)
Dim lst As New Generic.List(Of Project)
For Each proj As Project In DTE.Solution.Projects
If proj.Kind = Constants.vsProjectKindSolutionItems Then
lst.AddRange(GetSubProjects(proj.ProjectItems))
Else
lst.Add(proj)
End If
Next
Return lst
End Function
Private Function GetSubProjects(ByVal pis As ProjectItems) As Generic.List(Of Project)
Dim lst As New Generic.List(Of Project)
For Each pi As ProjectItem In pis
If pi.Kind = Constants.vsProjectItemKindSolutionItems Then
lst.Add(pi.SubProject)
ElseIf pi.Kind = Constants.vsProjectKindSolutionItems Then
lst.AddRange(GetSubProjects(pi.ProjectItems))
End If
Next
Return lst
End Function
它是我博客http://www.brianschmitt.com/2009/10/fixing-visual-studio-add-reference.html
中较大宏的一部分答案 2 :(得分:0)
要从Solution文件夹获取项目,请使用属性ProjectItem.SubProject