Jul*_*rau 116
适用于源代码:
适用于装配:
程序集"解析"的问题是我们关于行和文件的信息较少(信息基于.pdb文件,而Pdb只包含方法的行信息)
我个人推荐Mono.Cecil和NRefactory.
如果要将C#v3.5编译为.net程序集:
var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
我已经使用 SharpDevelop AST API 在OWASP O2 平台项目中实现了您所要求的内容(C# 代码的 AST 解析)。
为了更容易使用,我编写了一个快速 API,它公开了许多关键源代码元素(使用语句、类型、方法、属性、字段、注释),并且能够将原始 C# 代码重写为 C# 和 VBNET 。
您可以在此 O2 XRule 脚本文件上看到此 API 的运行情况:ascx_View_SourceCode_AST.cs.o2。
例如,这是处理 C# 源代码文本并填充多个 TreeView 和 TextBox 的方式:
public void updateView(string sourceCode)
{
var ast = new Ast_CSharp(sourceCode);
ast_TreeView.show_Ast(ast);
types_TreeView.show_List(ast.astDetails.Types, "Text");
usingDeclarations_TreeView.show_List(ast.astDetails.UsingDeclarations,"Text");
methods_TreeView.show_List(ast.astDetails.Methods,"Text");
fields_TreeView.show_List(ast.astDetails.Fields,"Text");
properties_TreeView.show_List(ast.astDetails.Properties,"Text");
comments_TreeView.show_List(ast.astDetails.Comments,"Text");
rewritenCSharpCode_SourceCodeEditor.setDocumentContents(ast.astDetails.CSharpCode, ".cs");
rewritenVBNet_SourceCodeEditor.setDocumentContents(ast.astDetails.VBNetCode, ".vb");
}
Run Code Online (Sandbox Code Playgroud)
ascx_View_SourceCode_AST.cs.o2上的示例还展示了如何使用从 AST 收集的信息在源代码上选择类型、方法、注释等。
作为参考,这里是编写的 API 代码(请注意,这是我第一次使用 SharpDevelop 的 C# AST 解析器,我仍在了解它是如何工作的):