【问题标题】:Roslyn: how to update multiple projects asynchronously?Roslyn:如何异步更新多个项目?
【发布时间】:2016-06-10 14:11:00
【问题描述】:

我正在调查使用 VisualStudioWorkspace 更新现有代码的 Visual Studio 扩展 (VSIX) 中 Roslyn 编译器的使用。

假设我当前的解决方案有 12 个项目。对于我想要的每个项目:

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

我了解这些对象的不变性,并且作为概念验证,我编写了一个示例,对第一个项目进行更改,然后对第二个项目进行更改,依此类推。

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

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

【问题讨论】:

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


    【解决方案1】:

    是的,这应该可以正常工作。当您完成对第一个项目的重写后,您可以执行 .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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 2022-08-21
      • 1970-01-01
      相关资源
      最近更新 更多