0

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

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

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

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

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

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

4

1 回答 1

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);
于 2016-06-10T17:22:00.627 回答