Я пытаюсь выяснить, как использовать rosyln для вставки атрибутов сборки в AssemblyInfo.cs
.Вставить ассемблеры сборки в 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:
, и я не могу понять, как получить там строковые литералы.
Я знаю, что мог (и, вероятно, должен) просто загрузить файл и использовать простой текстовый редактор для вставки строк, но в интересах понимания того, как Рослин должен работать.
га. Это круто. Я не знал об этом инструменте. –