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) & _
" <a href=http://www." & _
proj.Properties.Item("AssemblyName").Value().Split(".".ToCharArray)(0) & _
".com>" & _
proj.Properties.Item("AssemblyName").Value().Split(".".ToCharArray)(0) & _
" </a> - 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