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