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

相關問題