2

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

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

有没有办法可以遍历实际的项目节点?

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

4

3 回答 3

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

我在那里留下了一个“待办事项”,因为如果您要处理嵌套(子)项目,您实际上需要将其拉出到一个可以递归调用的函数中。

我从这个链接得到了这个解决方案,虽然它是 Visual Studio 2005 时代的材料,但它可能会让你朝着正确的方向前进。

于 2011-08-02T00:34:01.623 回答
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中更大宏的一部分

于 2011-08-07T11:09:23.403 回答
0

要从解决方案文件夹中获取项目,请使用属性 ProjectItem.SubProject

于 2011-09-09T04:42:34.033 回答