ndoc

簡介
雖說 Visual Studio.Net 已經可以為 c# 程式製作說明文件,但是如果不想安裝這個龐然大物,卻又想要享受這樣的便利,那麼該怎麼辦呢??
其實,.Net Framework 內的 compiler: csc 已經具有這樣的選項.只要在編譯的時候指定了這個選項,那麼,compiler就會自動將程式中我們依照規定所加上的註解擷取為一個 xml 檔案,裡面就是說明文件啦~~
那麼,什麼是”依照規定所加上的註解”呢??
原來這個東西的正名應該是[XML Documentation in C#].它是一份由微軟所訂定的白皮書,裡面載明應該要怎麼註解.
他最主要的用意是讓開發者能夠為程式做一些註解,而不必在程式整個完成之後才去做 API 說明文件這個苦工.像是 Java, C/C++…等等都有類似的工具可以幫忙做掉這件事.


安裝
首先,我們得先安裝微軟的 HTMLHelp 工具,這工具主要是被 ndoc 用來將html 檔轉換為 chm 檔案.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp
如果你想要在 Visual Studio.Net 內使用的話,你需要再安裝 Integration Kit.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwmscextendingnethelp.asp
接著再到 http://ndoc.sourceforge.net 下載 ndoc
http://ndoc.sourceforge.net/wiki/Download_NDoc
在這裡我們直接下載已經包裝好的安裝程式來安裝,省掉自行編譯的麻煩.
http://prdownloads.sourceforge.net/ndoc/NDocSetup.Exe?download
這邊要特別注意的是,安裝時,必須要能上網連到外面去,因為安裝程式會自動去下載最新版本的 NDocSetup.msi ,然後再安裝.如果你無法上網,那麼就請先將
http://ndoc.sourceforge.net/setup/NDocSetup.msi
下載下來,然後以滑鼠右鍵點選 NDocSetup.msi, 選安裝,同樣也可以安裝.
ndocsetup_1.jpg
使用
下面我們就來看看要怎麼使用這個工具吧~
在安裝完成之後,接下來就是乖乖的為程式加上註解啦,這裡以一個簡單的 Hello world 程式作為範例.

using System;
/// <summary>
/// 主程式類別
/// </summary>
public class MainProg
{
  /// <summary>
  /// 印出 Hello world 字串.
  /// </summary>
  /// <remarks>
  /// <para>
  /// 印出 Hello world 字串.
  /// </para>
  /// <para>
  /// 向 <c>strName</c> 問候 Hello world.
  /// </para>
  /// </remarks>
  /// <param name=”strName”>姓名</param>
  public static void sayHello( string strName )
  {
    Console.WriteLine(“Hello world!! ” + strName );
  }
  /// <summary>
  /// 主程式
  /// </summary>
  /// <param name=”args”>程式引數</param>
  public static void Main( string[] args )
  {
    sayHello(“RUN!PC”);
  }
}

將程式存到 c:\tmp 下並命名為 hello.cs 之後,接著請打開”命令提示字元”,依序輸入

cd c:\tmp
csc /doc:hello.xml /target:exe /out:hello.exe hello.cs

編譯完成後,你會發現多出 hello.exe 與 hello.xml
這裡加上 /doc:hello.xml 就是為了要讓 compiler 將註解輸出到 hello.xml, ndoc 會用到這個檔案.
接著,請打開 ndoc, 你會看到如圖二的畫面.
ndoc_1.jpg
按下 Add, 然後將我們剛剛編譯出來的 hello.exe 和 hello.xml 加入,選擇 ok.如圖三.
ndoc_2.jpg
接著你會發現 hello.exe 出現在畫面上,如圖四.
ndoc_3.jpg
下面有一些屬性可以調整,例如標題列要出現的文字,輸出路徑,輸出檔名…等等.
這裡我們將輸出路徑(OutputPath)指向c:\tmp\doc\,並將 HtmlHelpName 改為 Hello.
接著,按下 Build (圖四紅色筆框起來的按鈕)
Build 會花一些時間(視專案大小而定),這段期間 ndoc 會開啟 hello.exe 這個 assembly 和 hello.xml,並利用 xslt 來將 xml 轉換為 html 檔案,再呼叫 HtmlHelp 來編譯為 .chm 檔案.
編譯完成後,你可以直接點選工具列最右邊的按鈕(像放大鏡的那個)來查看編譯後的成果.如圖五.
ndoc_result.jpg
我第一次製作成功的時候,心裡蠻感動的,因為只要在寫程式的時候,多花一點心力去註解,就可以這麼樣地省力製作出一份 API 文件.
我們可以去瀏覽一下 c:\tmp\doc 這個資料夾,你會發現裡面有大量的 html 與圖片檔,這正證明了 ndoc 會先轉換為 html 之後,再交由 HtmlHelp 去編譯為 .chm 檔案.(如圖六)
ndoc_dir.jpg
XML Documentation tags
除了我們剛剛有使用到的 summary, remarks, param, para, c 之外,還有提供許多 tag 可以用來標明,以下簡單說明如下:

tag 名稱 用途
c 讓包起來的文字字體與程式碼相同
code 表示程式碼
example 如何使用這個類別或函數的簡單範例
exception 描述例外處理
list 表列
para 表示被包起來的文字是一個段落
param 對參數的說明
paramref 表示直接連結到某參數的說明
permission 權限的描述
remarks 用來作詳細描述
returns 對回傳值的說明
see 指定一個連結
seealso 表示可以另行參考的項目
summary 最常見的,用來簡單描述用途
value 描述屬性的值

ndoc 本身也有擴充一些 tag,這部分讀者可以自行到 ndoc 官方網站去尋找相關資料.
不過我相信 XML Documentation 的定義應該是足夠應付大部分的狀況了.
參考資料
ndoc 官方網站:
http://ndoc.sourceforge.net
文件參考:
XML Documentation in C# http://www.gotdotnet.com/team/csharp/learn/whitepapers/XMLDocs.doc
相關軟體下載:
HTML Help: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp
Integration Kit:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwmscextendingnethelp.asp
Ndoc: http://ndoc.sourceforge.net/wiki/Download_NDoc
延伸閱讀:
http://ndoc.sourceforge.net/wiki/NDoc_Articles