无法在Roslyn中有效地将类添加到命名空间

时间:2017-04-04 10:05:05

标签: c# .net roslyn roslyn-code-analysis

我使用Roslyn 2.0和SyntaxFactory生成SyntaxTree

var namespaceNode = SyntaxFactory.NamespaceDeclaration(
    SyntaxFactory.ParseName("Root.MyNamespace1"));
var classNode = SyntaxFactory.ClassDeclaration("MyClass");

namespaceNode.AddMembers(classNode);

缺少成员

似乎一切正常,但当我通过调用namespaceNode检查调试器对象namespaceNode.ToString()时,我得到:

namespaceRoot.MyNamespace1{}

每次我在ToString上使用SyntaxNode时,它通常会发出打印的代码,所以我很确定这里的问题是命名空间是空的。即使我打电话给AddMembers

,班级也不在那里

命名空间中没有成员!我做错了什么?

1 个答案:

答案 0 :(得分:2)

当我写这篇文章时:

namespaceNode.AddMembers(classNode);

我在Visual Studio 2017社区收到一条警告,说明正在发生的事情:

  

RS1014' NamespaceDeclarationSyntax'是不可改变的' AddMembers'不会对它产生任何影响。考虑使用' AddMembers'中的返回值。

所以你必须

namespaceNode = namespaceNode.AddMembers(classNode);