2012-08-13 103 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