提取课程信息

时间:2016-02-21 01:24:34

标签: c# roslyn documentation-generation nrefactory

我需要为我的代码创建一些文档。为此,我必须从几百个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语句。总是

有没有其他方便的方法来提取信息并生成此文档?

2 个答案:

答案 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#解析器开始,则不会出现这些问题。所以,除非你的表现对你来说是完全不可接受的,否则我认为你应该使用它。