Я являюсь поклонником методов SyntaxFactory.Parse*
. (Они, как правило, легче понять)
Вы можете использовать следующие для создания атрибута, который вы ищете:
var name = SyntaxFactory.ParseName("MyAttribute");
var arguments = SyntaxFactory.ParseAttributeArgumentList("(\"some_param\")");
var attribute = SyntaxFactory.Attribute(name, arguments); //MyAttribute("some_param")
var attributeList = new SeparatedSyntaxList<AttributeSyntax>();
attributeList = attributeList.Add(attribute);
var list = SyntaxFactory.AttributeList(attributeList); //[MyAttribute("some_param")]
В качестве альтернативы можно использовать ручную работу подход от инструмента RoslynQuoter Кирилла. Но я думаю, что тот факт, что никто не хочет, чтобы написать этот код без его инструмента говорит ...;)
Ручной подход выглядит следующим образом:
var attributeArgument = SyntaxFactory.AttributeArgument(
SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression, SyntaxFactory.Token(default(SyntaxTriviaList), SyntaxKind.StringLiteralToken, "some_param", "some_param", default(SyntaxTriviaList))));
var otherList = new SeparatedSyntaxList<AttributeArgumentSyntax>();
otherList = otherList.Add(attributeArgument);
var argumentList = SyntaxFactory.AttributeArgumentList(otherList);
var attribute2 = SyntaxFactory.Attribute(name, argumentList);
В вашем примере вы хотите добавить StringLiteralExpression
как ваш аргумент.
https://github.com/KirillOsenkov/RoslynQuoter/issues/9 – SLaks