我正在试图弄清楚如何使用rosyln将装配属性插入AssemblyInfo.cs
。
我的属性看起来像这样:
[assembly: Foo(@"\\somepath\tosomething)"]
我可以这样读他们:
var syntaxRoot = tree.GetRoot();
var attr = syntaxRoot.DescendantNodes().OfType<AttributeSyntax>();
var attrNames = attr.Select(a => a.Name);
var deployments = attr.Where(a => a.Name.ToString() == "Foo")
.Select(d => d.DescendantTokens()
.FirstOrDefault(t => t.Kind() == SyntaxKind.StringLiteralToken).ValueText);
我可以得到传递给属性的参数。
我可以尝试插入如下属性:
var list = new List<SyntaxNode>()
{
SyntaxFactory.AttributeList(SyntaxFactory.SeparatedList<AttributeSyntax>(new List<AttributeSyntax>()
{
SyntaxFactory.Attribute(SyntaxFactory.ParseName("DeploymentLocation"))
}))
};
var n = tree.GetRoot().InsertNodesAfter(tree.GetRoot().ChildNodes().Last(), list);
这将插入一个最终看起来像这样的节点:
...
[assembly: AssemblyFileVersion("1.0.0.0")]
[DeploymentLocation]
所以它添加了我的属性,但它没有assembly:
前缀,我无法弄清楚如何在那里获取字符串文字参数。
我知道我可以(并且可能应该)只加载文件并使用简单的文本编写器来插入字符串,但是为了理解Roslyn应该如何工作。
答案 0 :(得分:2)
将代码粘贴到Roslyn Quoter节目中
.WithTarget(
AttributeTargetSpecifier(
Token(SyntaxKind.AssemblyKeyword)))))