如何使用.NET编译器平台创建一个const声明

时间:2016-06-02 19:34:02

标签: c# code-generation roslyn

我正在尝试使用Roslyn创建一个小代码生成器,或者现在称为.NET编译器平台,我使用的是encodeom,这很麻烦,但是MSDN得到了参考,现在Roslyn几乎没有文档,所有文档都是专注于代码分析而不是代码生成。 所以我的问题很简单: 我怎样才能创建类似的东西:

private const string MyString = "This is my string";

使用Compiler Platform类?我找到了类似FieldDeclarationSyntax和ExpressionSyntax的东西,但我发现的所有样本都会产生类似的东西     Myclass myvariable = new Myclass(); 并没有什么能告诉我一些如此简单的东西 字符串类型声明。 任何线索都会很棒。 提前谢谢

1 个答案:

答案 0 :(得分:6)

您可以使用Roslyn Quoter轻松找出构建不同语法的方法。在这种情况下,您希望将constprivate修饰符添加到字段声明中,以使其看起来像:

var constField = SyntaxFactory.FieldDeclaration(
    SyntaxFactory.VariableDeclaration(
        SyntaxFactory.PredefinedType(
            SyntaxFactory.Token(SyntaxKind.StringKeyword)))
    .WithVariables(
        SyntaxFactory.SingletonSeparatedList<VariableDeclaratorSyntax>(
            SyntaxFactory.VariableDeclarator(
                SyntaxFactory.Identifier("MyString"))
            .WithInitializer(
                SyntaxFactory.EqualsValueClause(
                    SyntaxFactory.LiteralExpression(
                        SyntaxKind.StringLiteralExpression,
                        SyntaxFactory.Literal("This is my string")))))))
.WithModifiers(
    SyntaxFactory.TokenList(
        new []{
            SyntaxFactory.Token(SyntaxKind.PrivateKeyword),
            SyntaxFactory.Token(SyntaxKind.ConstKeyword)}))))))