2014-02-13 29 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();