我有一个自定义生成的变量声明,使用根据某些条件收集SyntaxFactory.VariableDeclaration的列表。SyntaxNode
我做了以下事情:
修改节点
var newRoot = root.ReplaceNode(expression, newVariableDeclaration)
Run Code Online (Sandbox Code Playgroud)
这样就成功修改了节点newVariableDeclaration。
在循环中删除与列表中存在的节点相对应的节点
foreach (var listObject in listObjects)
{
newRoot = newRoot.RemoveNode(listObject, SyntaxRemoveOptions.KeepNoTrivia);
}
Run Code Online (Sandbox Code Playgroud)
这不会改变,newRoot并且所有listObject需要更改的内容都保持不变。
如果我们使用root.RemoveNode(listObject, SyntaxRemoveOptions.KeepNoTrivia)它,显然它会继续替换以前的更改。
所以这里newVariableDeclaration是整个文档中唯一发生更改的节点,这是因为我从 获得的newRoot SyntaxNodes的节点发生了更改。SyntaxNoderoot
如果我做错了,请纠正我。
编辑:
我调查过,CSharpSyntaxRewriter但它似乎每次访问一个节点时都在分析单个节点,并且一次只能修改一个节点。在我的场景中,我必须访问特定节点,对其进行更改,并根据对访问节点所做的更改删除其他节点。
在Visual Studio 2013的Roslyn SDK预览安装之后
以该顺序
我无法使用代码修复在Roslyn-> Diagnostics下创建一个新项目,我收到一条警告消息,如下所示.
