使用Roslyn如何使用指令更新类?

时间:2013-06-26 05:53:47

标签: c# roslyn

刚刚发现罗斯林,请耐心等待。

我想更新班级顶部的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

1 个答案:

答案 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来电的结果。