2012-08-13 82 views
0

我想從這些代碼的源代碼的註釋線以下C#獲取行號

foreach (Match match in re.Matches(FileText)) 
{ 
    StackFrame CallStack = new StackFrame(0, true); 
    sb.Append(match.ToString() + CallStack.GetFileLineNumber() + System.Environment.NewLine); 
} 
return sb.ToString(); 

提取的行號如何捕捉行號每個註釋例如/ *測試註釋*/Line:50

回答

0

程序集中沒有「文檔」。文檔以XML文件的形式生成,並應與程序集一起分發。從調用堆棧中,您可以獲取類和方法的名稱。如果您知道XML文件在哪裏,那麼您可以參考http://jimblackler.net/blog/?p=49,他們可以通過大多數方法讀取文檔。

但是,這不是.Net做這種事情的方式。爲了有額外的編譯時註釋能夠在編譯後保留下來,並且在運行時會出現,.Net允許你引入CustomAttributes,它可以應用於方法,類,字段,屬性,枚舉,(....) 。查看該鏈接,查看「作者」屬性的示例,並考慮將魔術評論更改爲屬性。這是在整個.Net中執行它的正常方式,不僅僅是C#。

一旦你從調用堆棧閱讀MethodInfo的,你可以在它上面調用GetCustomAttributes,讀你已經寫在他們的數據,見http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.aspx

+0

其實我設法從源代碼文件,但什麼解壓評論塊我想也是從註釋塊中提取行號。目前的輸出看起來像; 評論2 評論3 但我想它顯示註釋1號線50 \t \t \t評論2號線70 \t \t \t評論3號線77 – redpiyo2003 2012-08-16 06:10:54

+0

IIRC,註釋塊在編譯階段不會保留的行號。您必須爲buiild序列編寫預處理器或後處理器,以便分析.cs文件並存儲數據供以後使用 - 就像XML文檔一樣 - 但全部由您自己完成。保存的唯一行號存儲在調試信息中,但它們描述可運行代碼,而不是屬性,註釋或其他不可運行的代碼。你可以嘗試使用[#line](http://en.csharp-online.net/ECMA-334%3A_9.5.7_Line_directives),但我認爲它不會導致任何地方。 – quetzalcoatl 2012-08-16 08:34:49