获取解决方案文件sln中所有的项目文件路径。

进行每日编译架构需要,读取sln文件,包含的项目路径。写了一个简单的函数。只是针对vb.net的解决方案,vs2003版本:

Function GetProjectPaths(ByVal sln As String) As System.Collections.Specialized.StringCollection
    If sln Is Nothing Then
        Throw New ArgumentNullException("没有指定解决方案。")
    End If

    If Not IO.File.Exists(sln) Then
        Throw New IO.FileNotFoundException(String.Format("解决方案  {0} 不存在。", sln))
    End If

    Dim file As String = sln
    Dim r As IO.StreamReader
    Dim sc As New System.Collections.Specialized.StringCollection

    Try
        r = New IO.StreamReader(file, System.Text.Encoding.Default)
        Dim line As String = r.ReadLine
        While Not line Is Nothing
            If line.StartsWith("Project(") Then
                Dim strSplit As String = """, """
                Dim starIndex As Integer = line.IndexOf(strSplit)
                If starIndex <> -1 Then
                    Dim projectPath As String = line.Substring(starIndex + 4)
                    Dim endIndex As Integer = projectPath.IndexOf(strSplit)

                    '项目路径
                    projectPath = projectPath.Substring(0, endIndex)

                    Dim slnPath As String = IO.Path.GetDirectoryName(file)
                    IO.Directory.SetCurrentDirectory(slnPath)  '解决方案中存在的相对路径,偷懒做法。
                    projectPath = IO.Path.GetFullPath(projectPath)

                    sc.Add(projectPath)

                End If
            End If
            line = r.ReadLine
        End While

    Catch ex As Exception
        Throw New System.Exception("获取项目文件路径发生错误。", ex)
    Finally
        If Not r Is Nothing Then
            r.Close()
        End If

    End Try

    Return sc

End Function

posted on 2009-05-13 17:25  zqonline  阅读(840)  评论(0编辑  收藏  举报

导航