j.strugnell
j.strugnell

Reputation: 407

Outputting list of files that are part of a Visual Studio Project

I'm looking for a way to output a list of all files in a Visual Studio project for documentation purposes.

I would have thought this would be possible but I can't find any info. I'm not talking about using Sandcastle to hook up to XML comments, I just want a "simple" indented list of project files.

I'm guessing we could run an xsl file against the Proj file but hopefully somebody has already got a solution for this? Ideally this would work on both 2008 and 2010.

Upvotes: 0

Views: 2144

Answers (1)

stijn
stijn

Reputation: 35901

The VS2008 sample macros already contain a macro that practically does this (prints a list of source/header file to the output window). It's called ListProj1, under the Utilities samples. Here's the code in case you don't have it:

Sub ListProj()
  Dim project As Project
  Dim projectObjects As Object()
  Dim window As Window
  Dim target As Object
  window = DTE.Windows.Item(Constants.vsWindowKindCommandWindow)
  projectObjects = DTE.ActiveSolutionProjects
  If projectObjects.Length = 0 Then
    Exit Sub
  End If
  project = DTE.ActiveSolutionProjects(0)
  If (DTE.ActiveWindow Is window) Then
    target = window.Object
  Else
    target = GetOutputWindowPane("List Project")
    target.Clear()
  End If
  ListProjAux(project.ProjectItems(), 0, target)
End Sub

Sub ListProjAux(ByVal projectItems As EnvDTE.ProjectItems, ByVal level As Integer, ByVal outputWinPane As Object)
    Dim projectItem As EnvDTE.ProjectItem
    For Each projectItem In projectItems
        If projectItem.Collection Is projectItems Then
            Dim projectItems2 As EnvDTE.ProjectItems
            Dim notSubCollection As Boolean
            OutputItem(projectItem, level, outputWinPane)
            '' Recurse if this item has subitems ...
            projectItems2 = projectItem.ProjectItems
            notSubCollection = projectItems2 Is Nothing
            If Not notSubCollection Then
                ListProjAux(projectItems2, level + 1, outputWinPane)
            End If
        End If
    Next
End Sub

Sub OutputItem(ByVal projectItem As EnvDTE.ProjectItem, ByVal level As Integer, ByVal outputWinPane As Object)
    Dim i As Integer = 0
    While (i < level)
        outputWinPane.OutputString("    ")
        i = i + 1
    End While
    outputWinPane.OutputString(projectItem.FileNames(1))
    outputWinPane.OutputString(Microsoft.VisualBasic.Constants.vbCrLf)
End Sub

Upvotes: 1

Related Questions