2016-06-10 44 views
0

我正在调查在使用VisualStudioWorkspace来更新现有代码的Visual Studio扩展(VSIX)中使用Roslyn编译器。Roslyn:如何异步更新多个项目?

想象一下,我目前的解决方案有12个项目。对于每一个这些项目我想:

  1. 添加一个新的代码文件
  2. 更新现有的代码文件

我了解这些对象的不变性,并作为证明的概念我写了一个例子,对第一个项目进行了更改,然后是第二个项目等。

然后我想知道是否可以使用异步任务对每个项目进行更改,并且当所有任务都完成后(所有项目都已更新),请更新解决方案。

为此,我改变了我的概念验证,现在我正处于现在有12个更新项目的阶段。我不清楚的是,我如何将所有更改合并到当前的解决方案中,以便我可以一步就致电myWorkspace.TryApplyChanges(sln)

回答

0

是的,这应该很好。当您完成对第一个项目的重写时,您可以执行.Solution并为您提供一个新的重写解决方案。然后,去改写第二个项目。有一个Solution.ProjectIds集合,它为您提供了一个ID列表,不会从更改为快照。

var originalSolution = ...; 
var rewrittenSolution = originalSolution; 

foreach (var projectId in originalSolution.ProjectIds) 
{ 
    var projectToRewrite = rewrittenSolution.GetProject(projectId); 

    // update projectToRewrite here 

    rewrittenSolution = projectToRewrite.Solution; 
} 

workspace.TryApplyChanges(rewrittenSolution);