10

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

我想更新班级顶部的 using 指令以包含附加语句,例如:

using System;

public class Foo {

}

应该变成:

using System;
using Custom.Bar;

public class Foo {

}

我看到我可以覆盖SyntaxRewriter并且我已经这样做以解决方法级别的代码,但是我看不到可能让我访问这些 using 指令的覆盖?

谢谢。

编辑:

我找到了这个属性,但我不知道如何修改它。

var tree = document.GetSyntaxTree().GetRoot() as SyntaxNode;

var compilationUnitSyntax = (CompilationUnitSyntax) (tree);

if (compilationUnitSyntax != null)
      compilationUnitSyntax.Usings.Add();

不幸的是 UsingDirectiveSyntax 是内部的,所以我该如何添加一个!:D

4

1 回答 1

18

要创建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

于 2013-06-26T07:01:43.170 回答