c# - 使用 Roslyn 如何使用指令更新类?

标签 c# roslyn

刚刚发现 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/

相关文章:

C# <exception> 标签不显示

c# - 不能在 ShowMessageAsync 上使用 await

c# - 举办锦标赛,如何存储所有玩家分数

c# - C# 类实现中接口(interface)变量的用途

c# - Roslyn:将 C# 转换为 VB

c# - 如何禁用所有 Roslyn 代码分析器?

c# - 在using子句中的类上调用Close是有益,有害还是无谓的?

c# - 如何在 C# WPF 应用程序中获取 FFMPEG 转换进度到进度条?

.net - Property-of 又名 infoof——通过 Rosyln?

c# - 从字符串创建 BlockSyntax (Roslyn)