2014-02-13 1 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 неизменен. Я просто удалю свой ответ, как вы его решили. – rla4

2

Немного чище, чем File.WriteAllText, просто создать новый синтаксическое дерево, используя обновленный корневой узел:

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