我使用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
。
命名空间中没有成员!我做错了什么?
答案 0 :(得分:2)
当我写这篇文章时:
namespaceNode.AddMembers(classNode);
我在Visual Studio 2017社区收到一条警告,说明正在发生的事情:
RS1014' NamespaceDeclarationSyntax'是不可改变的' AddMembers'不会对它产生任何影响。考虑使用' AddMembers'中的返回值。
所以你必须
namespaceNode = namespaceNode.AddMembers(classNode);