4

我想开始使用 NRefactory 5 来解析 CSharp 文件,进行重构。但是文档很少。所以我尝试并失败了:我从以下代码开始,看看是否可以AstNode从 cs 文件中获取树。

我希望解析为我生成一些节点,但没有。有人可以指导我吗?

TextReader reader = File.OpenText(fname);
CompilationUnit compilationUnit;

CSharpParser parser = new CSharpParser();
compilationUnit = parser.Parse(reader, fname);
AstNode node = compilationUnit.GetNextNode();
System.Collections.Generic.IEnumerable<AstNode> desc = 
    compilationUnit.Descendants;
foreach (AstNode jo in desc)
{
    System.Console.WriteLine("At least something here");
}
4

2 回答 2

2

看看ICSharpCode.NRefactory.DemoNRefactory 源代码中的项目 - 它可以解析一些代码并在 TreeView 中显示语法树。

您发布的代码确实应该产生一些节点 -compilationUnit.Children将包含直接子节点(通常是 usings 和命名空间声明)。

还有CodeProject 文章

于 2012-06-16T20:36:33.600 回答
0

编译单元现已过时。它被语法树取代。

尝试以下代码:

        TextReader reader = File.OpenText("myfile.cs");
        SyntaxTree syntaxTree;

        CSharpParser parser = new CSharpParser();
        syntaxTree = parser.Parse(reader, "myfile.cs");

        IEnumerable<AstNode> desc = syntaxTree.Descendants;

        foreach(AstNode astNode in desc)
        {
            System.Console.WriteLine(astNode.GetType());
        }
于 2017-08-23T07:07:24.767 回答