无法更新树,Roslyn的更改

时间:2014-02-13 12:57:33

标签: c# roslyn

我尝试使用方法ReplaceNode,替换过程成功,但我无法保存更改 例如我的代码的一部分

SyntaxTree tree = SyntaxTree.ParseFile(Path)
CompilationUnitSyntax root = tree.GetRoot();
MemberDeclarationSyntax firstMember = root.Members[0];
NamespaceDeclarationSyntax NamespaceDeclaration = (NamespaceDeclarationSyntax)firstMember;
NamespaceDeclaration =     NamespaceDeclaration.ReplaceNode((ClassDeclarationSyntax)NamespaceDeclaration.Members[i], lNewClassDeclarationSyntax);

我必须如何保存更改?

2 个答案:

答案 0 :(得分:2)

比File.WriteAllText稍微清晰一点,只需使用更新的根节点创建一个新的语法树:

root = root.ReplaceNode(oldNode, newNode);
tree = SyntaxTree.Create(root);
root = tree.GetRoot();

答案 1 :(得分:1)

root = root.ReplaceNode(lNamespaceDeclarationSyntax.Members[i], newRoot);
File.WriteAllText(tree.FilePath, root.GetText().ToString());

需要替换root中的节点...