Roslyn:如何异步更新多个项目?

时间:2016-06-10 14:11:00

标签: c# roslyn visual-studio-extensions roslyn-code-analysis

我正在研究在Visual Studio扩展(VSIX)中使用Roslyn编译器,它使用VisualStudioWorkspace来更新现有代码。

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

  1. 添加新代码文件
  2. 更新现有代码文件
  3. 我理解这些对象的不变性,作为一个概念验证,我写了一个例子,对第一个项目进行了更改,然后是第二个项目等等。

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

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

1 个答案:

答案 0 :(得分: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);