我想跨不同版本的/跟踪SyntaxNode
s 和s 。SyntaxTrivia
Solution
Workspace
我尝试用SyntaxAnnotation
s 注释一些节点。只要我不更新工作区,这就会很好。
调用Workspace.TryApplyChanges
(成功)似乎删除了所有SyntaxAnnotation
s.
- 这让我很惊讶。为什么会这样?
- 如何
SyntaxNode
跨工作区更新跟踪 s?
示例代码如下:
var workspace = new AdhocWorkspace();
var project = workspace.AddProject("TestProject", LanguageNames.CSharp);
var klass = SyntaxFactory
.ClassDeclaration("Klass")
.WithAdditionalAnnotations(new SyntaxAnnotation("Foo"));
var compUnit = SyntaxFactory.CompilationUnit().AddMembers(klass);
var document = project.AddDocument("TestFile.cs", compUnit);
var docId = document.Id;
var solution = document.Project.Solution;
var root1 = document.GetSyntaxRootAsync().Result;
var klass1 = root1.GetAnnotatedNodes("Foo").FirstOrDefault();
var eq1 = klass1.IsEquivalentTo(klass); // returns true
var apply = workspace.TryApplyChanges(solution); // returns true
var root2 = workspace.CurrentSolution.GetDocument(docId).GetSyntaxRootAsync().Result;
var klass2 = root2.GetAnnotatedNodes("Foo").FirstOrDefault(); // returns null, why?