刚刚发现罗斯林,请耐心等待。
我想更新班级顶部的using指令以包含其他语句,例如:
using System;
public class Foo {
}
应该成为:
using System;
using Custom.Bar;
public class Foo {
}
我看到我可以覆盖SyntaxRewriter
并且我这样做是为了解决方法级代码问题,但我看不到可能允许我访问这些使用指令的覆盖?
感谢。
编辑:
我找到了这个属性,但我不知道如何修改它。
var tree = document.GetSyntaxTree().GetRoot() as SyntaxNode;
var compilationUnitSyntax = (CompilationUnitSyntax) (tree);
if (compilationUnitSyntax != null)
compilationUnitSyntax.Usings.Add();
不幸的是,UsingDirectiveSyntax是内部的,所以如何添加一个! :d
答案 0 :(得分:14)
要创建SyntaxNodes
,您必须使用Syntax
类工厂方法Syntax.UsingDirective
方法。
您可以使用AddUsings
方法添加新的使用方式,例如
if (compilationUnitSyntax != null)
{
var name = Syntax.QualifiedName(Syntax.IdentifierName("Custom"),
Syntax.IdentifierName("Bar"));
compilationUnitSyntax = compilationUnitSyntax
.AddUsings(Syntax.UsingDirective(name).NormalizeWhitespace());
}
注意:由于CompilationUnitSyntax
的不变性,您需要将compilationUnitSyntax
变量重新分配给AddUsings
来电的结果。