我在寻找替代品CSharpCodeProvider.Parse
。该方法应该解析[C#]代码源并返回一个CompileUnit
对象。但是,该方法没有在任何.Net框架中实现。“CSharpCodeProvider.Parse”的替代方案
我的目的是能够浏览一个C#CodeDOM,而不必编译它。我正在编写一个应用程序,它执行一些代码分析,但我不一定会拥有所有外部引用,这意味着我无法编译它。
我在寻找替代品CSharpCodeProvider.Parse
。该方法应该解析[C#]代码源并返回一个CompileUnit
对象。但是,该方法没有在任何.Net框架中实现。“CSharpCodeProvider.Parse”的替代方案
我的目的是能够浏览一个C#CodeDOM,而不必编译它。我正在编写一个应用程序,它执行一些代码分析,但我不一定会拥有所有外部引用,这意味着我无法编译它。
的SharpDevelop(开源常用的单IDE)有一个名为NRefactory库,使您解析C#代码,并将其转换成AST:http://wiki.sharpdevelop.net/NRefactory.ashx(摘录自该链接如下):
using (IParser parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(sourceCode)))
{
parser.Parse();
// this allows retrieving comments, preprocessor directives, etc. (stuff that isn't part of the syntax)
specials = parser.Lexer.SpecialTracker.RetrieveSpecials();
// this retrieves the root node of the result AST
result = parser.CompilationUnit;
if (parser.Errors.Count > 0) {
MessageBox.Show(parser.Errors.ErrorOutput, "Parse errors");
}
}
我们的DMS Software Reengineering Toolkit是一款用于构建任意语言分析工具的工具。 DMS提供了广义的解析,AST导航和修改,从修改后的树中重新生成源代码,符号表支持以及各种分析支持,以及编写源代码到源代码转换的能力,这些转换直接根据表面语法。
它的C# Front End提供了一个完整的C#4.0解析器(包括LINQ),它构建了一个完整的抽象语法树,其中包含源文本的每一项,包括作为注释修饰的源树节点上的注释捕获的注释。
有许多free C# parsers,最流行的是明显:
实际(2017至2018年)的信息:
更多的https://github.com/icsharpcode/SharpDevelop/wiki/NRefactory
下载NuGet包可用的信息: “ICSharpCode.NRefactory”
这里是代码片段:
using ICSharpCode.NRefactory.CSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ns1
{
public class Foo
{
public void Go()
{
CSharpParser parser = new CSharpParser();
string text = File.ReadAllText("myProgram.cs");
SyntaxTree syntaxTree = parser.Parse(text);
}
}
}
似乎很好,但要提及它只支持C# 2.0。 – psulek 2013-05-24 17:45:01