刚刚发现 Roslyn,所以请耐心等待。
我想更新我类(class)顶部的 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
最佳答案
要创建 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
的不变性,您需要使用 AddUsings
调用的结果重新分配您的 compilationUnitSyntax
变量。
关于c# - 使用 Roslyn 如何使用指令更新类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17312470/