最近在開發項目時,準備用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文件,但有的是<?xml version="1.0" encoding="utf-8"?>標記,有的項目文件沒有,原因不詳,也沒有時間去分析具體原因,如那位知道請一定告訴我。這樣導致在處理項目文件時需要分情況處理,我分析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.49028c.com/yxy21969/archive/2006/11/28/575257.html
新聞熱點
疑難解答