Daniel Fisher (lennybacon.com)

SOA, DATA & THE WEB

NDoc Macro again

Something usefull i posted in my old blog and promised Christian and Günther to post it again...

#Region "NDoc()"
    Sub NDoc()
        Dim nDocPath As String = "C:\Program files\NDoc\bin\.net-1.1\"

        Dim objProj As Object()
        Dim proj As Project

        'Get Project
        objProj = DTE.ActiveSolutionProjects
        If objProj.Length = 0 Then
            Exit Sub
        End If
        proj = DTE.ActiveSolutionProjects(0)

        If (proj.ConfigurationManager.ActiveConfiguration.ConfigurationName = "Debug"Then
            MsgBox("You cannot run this Macro in the Debug-configuration." & vbCrLf & _
            "Switch to ""Realease"", build the project and run this Macro again.")
            Exit Sub
        End If

        proj.ConfigurationManager.ActiveConfiguration.Properties.Item("DocumentationFile").Value =
            proj.Properties.Item("AssemblyName").Value() & ".xml"
        proj.Save()

        Dim XmlString As String = "<project>" & vbCrLf & _
            "    <assemblies>" & vbCrLf & _
            "        <assembly location=""" & proj.Properties.Item("FullPath").Value() & _
            "bin\Release\" & proj.Properties.Item("OutputFileName").Value() & """ documentation=""" & _
            proj.Properties.Item("FullPath").Value() & "bin\Release\" & _
            proj.Properties.Item("AssemblyName").Value() & ".xml"" />" & vbCrLf & _
            "    </assemblies>" & vbCrLf & _
            "    <namespaces>" & vbCrLf & _
            "    </namespaces>" & vbCrLf & _
            "    <documenters>" & vbCrLf & _
            "        <documenter name=""MSDN"">" & vbCrLf & _
            "            <property name=""OutputDirectory"" value=""" & _
            proj.Properties.Item("FullPath").Value() & "doc\"" />" & vbCrLf & _
            "            <property name=""HtmlHelpName"" value=""" & _
            proj.Properties.Item("AssemblyName").Value() & """ />" & vbCrLf & _
            "            <property name=""IncludeFavorites"" value=""True"" />" & vbCrLf & _
            "            <property name=""Title"" value=""" & _
            proj.Properties.Item("AssemblyName").Value() & _
            """ />" & vbCrLf & _
            "            <property name=""SplitTOCs"" value=""False"" />" & vbCrLf & _
            "            <property name=""DefaulTOC"" value="""" />" & vbCrLf & _
            "            <property name=""IncludeHierarchy"" value=""True"" />" & vbCrLf & _
            "            <property name=""ShowVisualBasic"" value=""True"" />" & vbCrLf & _
            "            <property name=""RootPageContainsNamespaces"" value=""True"" />" & vbCrLf & _
            "            <property name=""SortTOCByNamespace"" value=""True"" />" & vbCrLf & _
            "            <property name=""OutputTarget"" value=""HtmlHelpAndWeb"" />" & vbCrLf & _
            "            <property name=""HeaderHtml"" value="""" />" & vbCrLf & _
            "            <property name=""FooterHtml"" value=""Copyright © " & Year(Now) & _
            " &lt;a href=http://www." & _
            proj.Properties.Item("AssemblyName").Value().Split(".".ToCharArray)(0) & _
            ".com&gt;" & _
            proj.Properties.Item("AssemblyName").Value().Split(".".ToCharArray)(0) & _
            " &lt;/a&gt; - all rights reserved."" />" & vbCrLf & _
            "            <property name=""FilesToInclude"" value="""" />" & vbCrLf & _
            "            <property name=""LinkToSdkDocVersion"" value=""MsdnOnline"" />" & vbCrLf & _
            "            <property name=""ShowMissingSummaries"" value=""True"" />" & vbCrLf & _
            "            <property name=""ShowMissingRemarks"" value=""False"" />" & vbCrLf & _
            "            <property name=""ShowMissingParams"" value=""True"" />" & vbCrLf & _
            "            <property name=""ShowMissingReturns"" value=""True"" />" & vbCrLf & _
            "            <property name=""ShowMissingValues"" value=""True"" />" & vbCrLf & _
            "            <property name=""DocumentInternals"" value=""False"" />" & vbCrLf & _
            "            <property name=""DocumentProtected"" value=""True"" />" & vbCrLf & _
            "            <property name=""DocumentPrivates"" value=""False"" />" & vbCrLf & _
            "            <property name=""DocumentProtectedInternalAsProtected"" value=""False"" />" & _
            vbCrLf & _
            "            <property name=""DocumentEmptyNamespaces"" value=""False"" />" & vbCrLf & _
            "            <property name=""IncludeAssemblyVersion"" value=""False"" />" & vbCrLf & _
            "            <property name=""CopyrightText"" value="""" />" & vbCrLf & _
            "            <property name=""CopyrightHref"" value="""" />" & vbCrLf & _
            "            <property name=""ReferencesPath"" value="""" />" & vbCrLf & _
            "            <property name=""SkipNamespacesWithoutSummaries"" value=""False"" />" & _
            vbCrLf & _
            "            <property name=""UseNamespaceDocSummaries"" value=""False"" />" & vbCrLf & _
            "            <property name=""AutoPropertyBackerSummaries"" value=""False"" />" & vbCrLf & _
            "            <property name=""AutoDocumentConstructors"" value=""True"" />" & vbCrLf & _
            "            <property name=""DocumentAttributes"" value=""True"" />" & vbCrLf & _
            "            <property name=""ShowTypeIdInAttributes"" value=""True"" />" & vbCrLf & _
            "            <property name=""DocumentedAttributes"" value="""" />" & vbCrLf & _
            "            <property name=""GetExternalSummaries"" value=""True"" />" & vbCrLf & _
            "            <property name=""EditorBrowsableFilter"" value=""Off"" />" & vbCrLf & _
            "            <property name=""UseNDocXmlFile"" value="""" />" & vbCrLf & _
            "        </documenter>" & vbCrLf & _
            "    </documenters>" & vbCrLf & _
            "</project>"

        Dim FileWriter As System.IO.StreamWriter
        FileWriter = System.IO.File.CreateText(proj.Properties.Item("FullPath").Value() & _
        proj.Properties.Item("AssemblyName").Value() & ".ndoc")
        FileWriter.WriteLine(XmlString)
        FileWriter.Close()

        proj.ProjectItems.AddFromFile(proj.Properties.Item("FullPath").Value() & _
        proj.Properties.Item("AssemblyName").Value() & ".ndoc")
        proj.Save()

        If System.IO.Directory.Exists(proj.Properties.Item("FullPath").Value & "\doc\") = False Then
            System.IO.Directory.CreateDirectory(proj.Properties.Item("FullPath").Value & "\doc\")
        End If

        Dim hasDocDir As Boolean = False

        For Each pitem As EnvDTE.ProjectItem In proj.ProjectItems
            If pitem.Name = "doc" Then
                hasDocDir = True
            End If
        Next

        If hasDocDir = False Then
            proj.ProjectItems.AddFolder("doc")
            proj.Save()
        End If

        If System.IO.File.Exists(proj.Properties.Item("FullPath").Value & "\doc\" & proj.Properties.Item("AssemblyName").Value & ".chm") = False Then
            Dim chmWriter As System.IO.StreamWriter = 
                System.IO.File.CreateText(proj.Properties.Item("FullPath").Value() & "\doc\" & _
            proj.Properties.Item("AssemblyName").Value() & ".chm")
            chmWriter.WriteLine("")
            chmWriter.Close()
        End If
        proj.ProjectItems.AddFromFile(proj.Properties.Item("FullPath").Value() & "\doc\" & proj.Properties.Item("AssemblyName").Value() & ".chm")
        proj.Save()

        If proj.Properties.Item("PostBuildEvent").Value = "" Then
            proj.Properties.Item("PostBuildEvent").Value = """" & nDocPath & _
                 "NDocConsole.exe"" -documenter=MSDN -project=""$(ProjectDir)" & _
                 proj.Properties.Item("AssemblyName").Value() & ".ndoc"" -verbose" & vbCrLf & _
                 "copy $(ProjectDir)doc\" & proj.Properties.Item("AssemblyName").Value() & _
                 ".chm $(TargetDir)"
        Else
            Dim existing As String = ("" & proj.Properties.Item("PostBuildEvent").Value)
            Dim exArr As String() = existing.Split(vbCrLf)
            existing = ""
            Dim y As Integer
            For y = 0 To (exArr.Length - 1)
                If exArr(y).IndexOf(nDocPath) = -1 And exArr(y).IndexOf(".chm") = -1 Then
                    existing = existing & vbCr & exArr(y)
                End If
            Next
            existing = nDocPath & _
                 "NDocConsole.exe -documenter=MSDN -project=""$(ProjectDir)" & _
                 proj.Properties.Item("AssemblyName").Value() & ".ndoc"" -verbose" & vbCrLf & _
                 "copy $(ProjectDir)doc\" & proj.Properties.Item("AssemblyName").Value() & _
                 ".chm $(TargetDir)" & _
                 existing
            proj.Properties.Item("PostBuildEvent").Value = existing
        End If
        proj.Save()

        MsgBox("The file """ & proj.Properties.Item("AssemblyName").Value() & _
            ".ndoc"" has been added to the project." & vbCrLf & _
            "NDoc was registred as PostBuildEvent.")

    End Sub
#End Region

Misc, Project

« Herzblatt dead, dead, dead »

Comments

Write a comment