我需要为我的代码创建一些文档。为此,我必须从几百个C#类中提取信息。
基本上每个类都包含一些方法MyMethod
。在这种方法中,可能存在switch
个案例,但案例很少。整体代码结构就像这样
MyMethod()
{
..some code..
switch (variable)
case "A":
break;
case "B":
break;
..some other code..
}
我只需在MyMethod
中查找切换案例并提取case
值。
到目前为止,我想出了使用Roslyn或Nrefactory解析所有.cs文件的选项,然后使用AST查看它们以提取我需要的AST节点。
但是这种方法看起来有点奇怪,因为任务可以通过其他方式完全自动化。我有清晰的文件结构,我知道我需要检查的确切方法名称,并且其中只有一个switch
语句。总是
有没有其他方便的方法来提取信息并生成此文档?
答案 0 :(得分:2)
我能想到的只是解析C#文件或使用Mono.Cecil或类似方法解析编译的IL。在前一种情况下,我的朋友编写了一个C#解析器available here.
当然,如果您采用parse-cs方式,Roslyn现在是您提到的合适选项。这里有一个快速介绍:http://www.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/
答案 1 :(得分:1)
您想要解析C#代码。使用除了正确的C#解析器之外的任何东西(如Roslyn或NRefactory)都会导致代码非常脆弱。
例如,您将首先搜索字符串void MyMethod()
。然后,您会发现一种类型有void MyMethod( )
,因此您将搜索更改为正则表达式void\s+MyMethod\s*\(\s*\)
。然后,一些文件将在注释或字符串中包含void MyMethod()
,因此您将编写(不完美)检测注释和字符串的代码。
过了一段时间,你就会逐渐建立一个非常原始的C#解析器,而你又害怕接下来需要支持哪种代码。
如果从适当的C#解析器开始,则不会出现这些问题。所以,除非你的表现对你来说是完全不可接受的,否则我认为你应该使用它。