如何从头开始构建Roslyn语法树?

时间:2015-06-06 17:30:15

标签: c# visual-studio-2015 roslyn

我想做一些非常基本的代码生成(将服务API规范转换为某些C#类以与服务进行通信)。我发现this question似乎建议我可以致电Syntax.CompilationUnit()来创建新的CompilationUnityntax,但是我无法编译此代码;我无法在我能找到的任何语法类上找到CompilationUnit方法(我也找不到任何文档):(

CSharpSyntaxTree.Create似乎需要CSharpSyntaxNode,但我无法弄清楚如何创建其中一个:/

我使用VS 2015 RC和最新的Microsoft.CodeAnalysis NuGet包(1.0.0-rc2)。

1 个答案:

答案 0 :(得分:8)

似乎Syntax现在是SyntaxFactory

var comp = SyntaxFactory.CompilationUnit()
        .AddMembers(
            SyntaxFactory.NamespaceDeclaration(SyntaxFactory.IdentifierName("ACO"))
                    .AddMembers(
                    SyntaxFactory.ClassDeclaration("MainForm")
                        .AddMembers(
                            SyntaxFactory.PropertyDeclaration(SyntaxFactory.ParseTypeName("System.Windows.Forms.Timer"), "Ticker")
                                    .AddAccessorListAccessors(
                                    SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)),
                                    SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken))),
                            SyntaxFactory.MethodDeclaration(SyntaxFactory.ParseTypeName("void"), "Main")
                                    .AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
                                    .WithBody(SyntaxFactory.Block())
                            )
                    )
            );