C# 从一个简单的例子开始

C# 从一个简单的例子开始,c#,nrefactory,C#,Nrefactory,我想开始使用NRefactory 5解析CSharp文件,进行重构。 但文件资料却很少。所以我尝试了,但失败了: 我从下面的代码开始,看看是否可以从cs文件中获取AstNode树 我希望解析会为我生成一些节点,但不会。 有人能指引我吗 TextReader reader = File.OpenText(fname); CompilationUnit compilationUnit; CSharpParser parser = new CSharpParser(); compilationUni

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

我希望解析会为我生成一些节点,但不会。 有人能指引我吗

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");
}
TextReader=File.OpenText(fname);
编译单元编译单元;
CSharpParser=新的CSharpParser();
compilationUnit=parser.Parse(reader,fname);
AstNode node=compilationUnit.GetNextNode();
System.Collections.Generic.IEnumerable desc=
编译单元;
foreach(描述中的AstNode jo)
{
System.Console.WriteLine(“这里至少有一些东西”);
}

查看NRefactory源代码中的
ICSharpCode.NRefactory.Demo
项目-它可以解析一些代码并在树视图中显示语法树

您发布的代码确实应该生成一些节点-
compilationUnit.Children
将包含直接子节点(通常使用和名称空间声明)


还有。

编译单元现在已经过时了。它被替换为语法树

请尝试以下代码:

        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());
        }
TextReader=File.OpenText(“myfile.cs”);
合成树;
CSharpParser=新的CSharpParser();
syntaxTree=parser.Parse(读取器,“myfile.cs”);
IEnumerable desc=syntaxTree.substands;
foreach(描述中的AstNode AstNode)
{
System.Console.WriteLine(astNode.GetType());
}

谢谢您的回答。我还发现,在演示和测试中使用NRefactory的源代码是最好的源代码。特别是因为新版本5.0使大多数发布在互联网上的示例过时。