1

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

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

4

2 回答 2

2

我能想到的唯一事情是解析 C# 文件或使用 Mono.Cecil 或类似方法解析编译后的 IL。在前一种情况下,我的朋友已经编写了一个可用的 C# 解析器。

当然,如果您采用 parse-cs 方式,Roslyn 现在是您提到的合适选择。这里有一个快速介绍:http ://www.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/

于 2016-02-21T01:42:18.443 回答
1

你想解析 C# 代码。使用除了适当的 C# 解析器(如 Roslyn 或 NRefactory)之外的任何东西都会导致代码非常脆弱。

例如,您将从搜索字符串开始void MyMethod()。然后你会发现一种类型有void MyMethod( ),所以你将搜索更改为 regex void\s+MyMethod\s*\(\s*\)。然后某个文件将包含void MyMethod()在注释或字符串中,因此您将编写(不完美地)检测注释和字符串的代码。

一段时间后,您逐渐构建了一个非常原始的 C# 解析器,您担心接下来需要支持哪种代码。

如果您从正确的 C# 解析器开始,您将不会遇到这些问题。所以,除非你完全不能接受它的性能,否则我认为你应该使用它。

于 2016-02-21T12:02:09.423 回答