关于 c#:Cannot有效地将类添加到Roslyn中的命名空间

Cannot effectively add class to namespace in Roslyn

我正在使用 Roslyn 2.0 和 SyntaxFactory 来生成 SyntaxTree:

1
2
3
4
5
var namespaceNode = SyntaxFactory.NamespaceDeclaration(
    SyntaxFactory.ParseName("Root.MyNamespace1"));
var classNode = SyntaxFactory.ClassDeclaration("MyClass");

namespaceNode.AddMembers(classNode);

缺少成员

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

1
namespaceRoot.MyNamespace1{}

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

,该类也不存在

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


当我写这个时:

1
namespaceNode.AddMembers(classNode);

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

RS1014 'NamespaceDeclarationSyntax' is immutable and 'AddMembers' will not have any effect on it. Consider using the return value from 'AddMembers'.

所以你必须

1
namespaceNode = namespaceNode.AddMembers(classNode);