Visual Studio宏列出项目而不是解决方案文件夹

时间:2011-03-28 20:53:39

标签: visual-studio visual-studio-2010 vba visual-studio-macros

使用以下代码为我提供了解决方案文件夹,而不是真正的项目。

projectName = DTE.Solution.SolutionBuild.StartupProjects(0)
For Each project In DTE.Solution.Projects
    If project.UniqueName = projectName Then
        Return project
    End If
Next

我可以循环实际的Project节点吗?

我正在尝试从启动项目中读取属性。

3 个答案:

答案 0 :(得分:10)

我从未编写任何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,因为如果你想要处理嵌套(子)项目,你需要实际将它拉出到一个可以递归调用的函数中。

我从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