最近在開發專案時,準備用NDoc來產生類別庫的幫助文件。下載了破寶(percyboy)漢化的1.3版本,看文件說是支援.net2.0,但在使用時,發現應用NDoc來從解決方案新建NDoc專案時出現異常,不能成功地產生幫助文件。
下載原始程序,用vs.net2005轉換打開ndoc的解決方案進行調試,修改bug,調試通過,特記錄相關的bug及解決方法如下,如想用NDoc來產生vs.net生成的程序集的幫助文件時,可照此處理。
1.如果解決方案中的項目處於一個中文名字的目錄中時,不能處理拋出異常。原因在於ndoc在解析解決方案文件時,使用的utf編碼來開啟解決方案文件,導致中文無法正確處理。解決方法:開啟gui專案下的solution文件,定位到read方法,將開啟檔案的程式碼using (reader=new StreamReader(path))用using(reader=new StreamReader(path,System.Text.Encoding.GetEncoding(0 )))代替。 StreamReader的具體使用方法可以參考msdn。
2.解析專案文件時,由vs.net2005產生的專案文件本質上是xml文件,但有的是標記,有的專案文件沒有,原因不詳,也沒有時間分析具體原因,如那位知道請一定告訴我。這樣導致在處理專案文件時需要分情況處理,我分析ndoc原來的思路也是這樣的,可能2005以前的版本這兩種項目文件的格式不一樣,所以ndoc在解析項目文件時分情況進行了處理。但用vs.net2005產生的專案文件,雖然也有這樣的區別,但格式是一樣的,並不需要分情況處理。解決方法:開啟gui專案下的project文件,定位到GetConfiguratin(string configName),將以下程式碼:
if (_ProjectDocument.FirstChild.Name == "Project")
{
nodes = _ProjectNavigator.Select(string.Format("VS2005:Project/VS2005:PropertyGroup[@Condition=" '$(Configuration)|$(Platform)' == '{0}|AnyCPU' "]", configName ), _ProjectNamespaceManager);
}
else
{
nodes = _ProjectNavigator.Select(String.Format("/VisualStudioProject/CSHARP/Build/Settings/Config[@Name='{0}']", configName));
}
替換為:
nodes = _ProjectNavigator.Select(string.Format("VS2005:Project/VS2005:PropertyGroup[@Condition=" '$(Configuration)|$(Platform)' == '{0}|AnyCPU' "]", configName ), _ProjectNamespaceManager);
作瞭如上處理後,編譯通過後,用ndoc的從.net解決方案新建ndoc項目功能時能夠正常處理,但不知這樣處理後是否會對2005以前的版本產生的解決方案有不良影響,不過,2005推出時間也不短了,大部分的專案應該都遷移到2005下了,所以影響應該不大。
http://www.cnblogs.com/yxy21969/archive/2006/11/28/575257.html