Sab*_*_cs 5 c# code-generation roslyn
我正在尝试使用Roslyn创建一个小代码生成器,或者现在称为.NET编译器平台,我使用的是encodeom,这很麻烦,但是MSDN得到了参考,现在Roslyn几乎没有文档,所有文档都专注于代码分析代替代码生成.所以我的问题很简单:如何创建类似的东西:
private const string MyString = "This is my string";
Run Code Online (Sandbox Code Playgroud)
使用Compiler Platform类?我找到了类似FieldDeclarationSyntax和ExpressionSyntax的东西,但是我发现的所有样本都生成了Myclass myvariable = new Myclass(); 并没有什么能告诉我如何生成字符串类型声明这么简单.任何线索都会很棒.先感谢您
您可以使用Roslyn Quoter轻松找出构建不同语法的方法.在这种情况下,您希望将const和private修饰符添加到字段声明中,因此它看起来像:
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)}))))))
Run Code Online (Sandbox Code Playgroud)