首页 文章

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

提问于
浏览
0

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

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

  • 添加新的代码文件

  • 更新现有代码文件

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

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

为此,我已经改变了我的概念验证,我不知道如何将所有更改合并到我当前的解决方案中,以便我可以在一个步骤中调用 myWorkspace.TryApplyChanges(sln) .

1 回答

  • 0

    是的,这应该可以正常工作 . 当您使用一个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);
    

相关问题