在Roslyn中从工厂创建UsingDirective时会生成不正确的语法

时间:2016-11-27 18:00:12

标签: c# .net roslyn

我正在使用Roslyn来生成另一个树。所以我们正在处理AST转换。我正在使用SyntaxFactory来生成节点。

在特定情况下,我想创建一个如下所示的u using指令:

using MyNamespace.SubNamespace;

所以我这样做:

var usingDirective = SyntaxFactory.UsingDirective(SyntaxFactory.ParseName("MyNamespace.SubNamespace"));
var newNode = mynode.AddUsings(new[] { usingDirective });

但是,如果我检查生成的最终树newNode(通过简单地调用newNode.ToString()生成的字符串源代码),我看到我的指令已添加如下:

usingMyNamespace.SubNamespace;

如果我这样做,我可以看到同样的事情:usingDirective.ToString()。这似乎非常错误,需要一个空间,这应该会触发语法错误。发生了什么事?

1 个答案:

答案 0 :(得分:3)

添加此项以解决问题:

SyntaxFactory.UsingDirective(
    SyntaxFactory.ParseName("MyNamespace.SubNamespace")).NormalizeWhitespace();