C# Roslyn CodeFixProvider添加参数具有值的属性

C# Roslyn CodeFixProvider添加参数具有值的属性,c#,roslyn,C#,Roslyn,我正在为正在检测类声明中是否缺少MessagePackObject属性的分析器创建CodeFixProvider。此外,我的属性需要有一个参数keyasprropertyname的值true [MessagePackObject(keyAsPropertyName:true)] 我已经添加了属性,没有像这样的参数(我的解决方案方法) 专用异步任务AddAttributeAsync(文档文档、ClassDeclarationSyntax classDecl、CancellationToken C

我正在为正在检测类声明中是否缺少
MessagePackObject
属性的分析器创建CodeFixProvider。此外,我的属性需要有一个参数
keyasprropertyname
的值
true

[MessagePackObject(keyAsPropertyName:true)]
我已经添加了属性,没有像这样的参数(我的解决方案方法)

专用异步任务AddAttributeAsync(文档文档、ClassDeclarationSyntax classDecl、CancellationToken CancellationToken)
{
var root=await document.GetSyntaxRootAsync(cancellationToken);
var attributes=classDecl.AttributeLists.Add(
SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList(
属性(SyntaxFactory.IdentifierName(“MessagePackoObject”))
//.WithArgumentList(SyntaxFactory.AttributeArgumentList)(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.AttributeArgument)(SyntaxFactory.(“keyAsPropertyName”(“keyAsPropertyName”))))())
//.WithArgumentList(…)
)).NormalizeWhitespace());
返回文档。WithSyntaxRoot(
root.ReplaceNode(
classDecl,
classDecl.WithAttributeList(属性)
)).项目解决方案;
}
但我不知道如何添加参数有值的属性。有人能帮我吗?

[MessagePackObject(keyasprropertyname:true)]
是一个
AttributeArgumentSyntax
,它有名称冒号,没有名称相等,所以您只需创建它,不传递任何名称相等,并传递正确的初始表达式,如下所示:

...
var attributeArgument = SyntaxFactory.AttributeArgument(
    null, SyntaxFactory.NameColon("keyAsPropertyName"), SyntaxFactory.LiteralExpression(SyntaxKind.TrueLiteralExpression));

var attributes = classDecl.AttributeLists.Add(
    SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList(
        SyntaxFactory.Attribute(SyntaxFactory.IdentifierName("MessagePackObject"))
        .WithArgumentList(SyntaxFactory.AttributeArgumentList(SyntaxFactory.SingletonSeparatedList(attributeArgument)))
    )).NormalizeWhitespace());
...

您是否尝试过
。使用ArgumentList(SyntaxFactory.AttributeArgumentList(SyntaxFactory.SingletonSeparatedList)(SyntaxFactory.AttributeArgument(null,SyntaxFactory.NameColon(“keyAsPropertyName”),SyntaxFactory.LiteralExpression(SyntaxKind.TrueLiteralExpression'))
?@GeorgeAlexandria,是的,它工作得非常出色。请回答,我会标记它。如何调用AddAttributeAsync方法以及如何查找class@KarthicG,建议您阅读教程,
...
var attributeArgument = SyntaxFactory.AttributeArgument(
    null, SyntaxFactory.NameColon("keyAsPropertyName"), SyntaxFactory.LiteralExpression(SyntaxKind.TrueLiteralExpression));

var attributes = classDecl.AttributeLists.Add(
    SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList(
        SyntaxFactory.Attribute(SyntaxFactory.IdentifierName("MessagePackObject"))
        .WithArgumentList(SyntaxFactory.AttributeArgumentList(SyntaxFactory.SingletonSeparatedList(attributeArgument)))
    )).NormalizeWhitespace());
...