2014-02-13 28 views
1

我尝试使用方法ReplaceNode,更换过程成功,但无法保存更改。
对于我的代码无法更新树的更改,Roslyn

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); 

如何我一定要保存更改例如一部分?

回答

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

需要更换节点根...

+0

这正是我的意思。此外,你需要这样做的原因是因为Roslyn SyntaxTrees是不可变的。我只是删除我的答案,因为你已经解决了它。 – rla4

2

略高于File.WriteAllText清洁,只需创建使用更新的根节点一种新的语法树:

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