Roslyn 解决方案刷新

Roslyn Solution Refresh

我正在创建一些 VSIX。我有 VisualStudioWorkspace 服务。现在,我能够解析语法树并且一切正常。但是,当一个新文件被添加到解决方案中时(例如作为一些 VisualStudio 工作的结果),该文档不存在于 VisualStudioWorkspace.CurrentSolution 中。它是这样工作的:

首先,我得到工作区:

currentWorkspace = componentModel.GetService<VisualStudioWorkspace>();

现在 currentWorkspace.CurrentSolution 我可以得到语法树。现在作为一些工作的结果,一个新的 cs 文件被添加到解决方案中,但是 currentWorkspace.CurrentSolution 没有显示它。我必须手动添加吗?有什么方法可以刷新这个 CurrentSolution 对象吗?

Do I have to to add it manually?

是的,roslyn 的设计是所有对象都是不可变的,因此您必须return 一个新的解决方案。

github 上有几个支持这一事实的讨论:

https://github.com/KirillOsenkov/Bliki/wiki/Roslyn-Immutable-Trees https://github.com/dotnet/roslyn/issues/7626