Background:

I always have a difficult time remembering the various properties that can be set on an EnvDTE.Project object, and I never seem to find the right documentation, to jog my memory.  Over the years the documentation has improved quite a bit. However, I still found that certain aspects of the VS automation model are readily discoverable via macros. Below are a few examples of macros that I use on a regular basis to quickly dump properties and UIHierarchyItem paths to the IDE's output window.

Solution:

    ' Returns a "Miscellany" OutputWindowPane

    Function GetMiscDumpPane() As OutputWindowPane

        Dim ow As OutputWindow = DTE.Windows.Item(Constants.vsWindowKindOutput).Object

        Dim pane As OutputWindowPane

        Try

            pane = ow.OutputWindowPanes.Item("Miscellany")

        Catch ex As Exception

            pane = ow.OutputWindowPanes.Add("Miscellany")

        End Try

        Return pane

    End Function

   ' Calculate the UIHierarchyItem Path (useful for retrieving a specific UIHierarchyItem)

    Function CalcUIHierarchyItemPath(ByVal item As UIHierarchyItem) As String

        Dim path As String = "\\" & item.Name

        Try

            While Not (item.Collection Is Nothing)

                Try

                    path = path.Insert(0, "\\" & item.Name)

                Catch ex As Exception

                Finally

                    item = item.Collection.Parent

                End Try

            End While

        Catch ex As Exception

        End Try

        Return path

    End Function

 

    ' Recursively walk the UIHierarchyItems collection

    Sub WalkUIHierarchyItems(ByVal items As UIHierarchyItems,
                ByVal outputPane As OutputWindowPane)

        If Not (items Is Nothing) Then

            For Each item As UIHierarchyItem In items

                If Not (item.UIHierarchyItems Is Nothing) Then

                    WalkUIHierarchyItems(item.UIHierarchyItems, outputPane)

                End If

                outputPane.OutputString(item.Name & " : " & CalcUIHierarchyItemPath(item) & vbCr)

            Next

        End If

    End Sub

 

    ' List the UIHierarchyItems in the Solution Explorer Toolwindow

    Sub DumpUIHierarchyItems()

        Dim outputPane = GetMiscDumpPane()

        outputPane.OutputString("========================================" & vbCr)

        outputPane.OutputString("UIHierarchyItems in Solution Explorer" & vbCr)

        outputPane.OutputString("========================================" & vbCr)

 

        Dim uih As UIHierarchy = DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Object

        WalkUIHierarchyItems(uih.UIHierarchyItems, outputPane)

    End Sub

 

    ' Recursively walk the ProjectItems collection

    Sub WalkProjectItems(ByVal items As ProjectItems, ByVal outputPane As OutputWindowPane)

        If Not (items Is Nothing) Then

            For Each item As ProjectItem In items

                If Not (item.ProjectItems Is Nothing) Then

                    WalkProjectItems(item.ProjectItems, outputPane)

                End If

                outputPane.OutputString(item.Name & vbCr)

            Next

        End If

    End Sub

 

    ' List Project Items for each loaded project

    Sub DumpProjectItems()

        Dim outputPane = GetMiscDumpPane()

        For Each proj As Project In DTE.Solution.Projects

            Try

                outputPane.OutputString("========================================" & vbCr)

                outputPane.OutputString("Project Items for " & proj.Name & vbCr)

                outputPane.OutputString("========================================" & vbCr)

                WalkProjectItems(proj.ProjectItems, outputPane)

            Catch ex As Exception

            End Try

        Next

    End Sub

 

    ' List Project.Properties for each loaded project

    Sub DumpProjProperties()

        Dim outputPane = GetMiscDumpPane()

        For Each proj As Project In DTE.Solution.Projects

            Try

                outputPane.OutputString("========================================" & vbCr)

                outputPane.OutputString("Project Properties for " & proj.Name & vbCr)

                outputPane.OutputString("========================================" & vbCr)

                For Each prop As [Property] In proj.Properties

                    outputPane.OutputString(prop.Name & " : ")

                    Try

                        outputPane.OutputString(prop.Value.ToString() & vbCr)

                    Catch ex As Exception

                    End Try

                Next

            Catch ex As Exception

            End Try

        Next

    End Sub