2

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

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

我可以通过实际的项目节点循环吗?

我想从启动项目读取属性。

回答

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时代的素材,但它可能会让你朝着正确的方向前进。

+0

+1作为链接。我会尝试一下并让你知道。 – Mrchief 2011-08-02 02:38:47

+0

这工作完美无瑕(虽然它的一种黑客)!如果有人能找到更好的解决方案,我会保持开放状态,否则这将是公认的答案。 – Mrchief 2011-08-02 14:28:25

+0

@Mrchief很高兴听到。我不知道这是不是一个黑客,但只是不幸的命名?看起来这些宏的API并没有因各种VS更新而发生显着改变,可能是为了防止不必要的向后兼容性破坏。 IIRC Visual Studio 2003没有解决方案文件夹或嵌套项目的概念。所以也许那时候命名是完美的,但现在不是那么多。 – ckittel 2011-08-02 15:09:41

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

+0

看起来很有希望的一个问题 - 它也列出了“解决方案项目”文件夹。 – Mrchief 2011-08-07 15:00:33

0

拿到项目的解决方案文件夹从我的博客较大宏的一部分,使用属性ProjectItem.SubProject

+0

这不是我要求的。 – Mrchief 2011-10-05 21:40:36

相关问题