将 Roslyn MSBuildWorkspace 输出到不同的文件夹

Output a Roslyn MSBuildWorkspace to different folder

执行时

mSBuildWorkspace.TryApplyChanges(solution);

Visual Studio 原地更改解决方案。这意味着如果我想输出到不同的位置,我需要先将整个解决方案复制到请求的目标,然后再对其进行处理。这很容易出错,因为解决方案可能具有指向依赖项的相对路径链接,这在移动解决方案时可能会中断。

那么有没有办法告诉 MSBuildWorkspace 将更改输出到与源文件夹不同的文件夹?

没有对此的内置支持。

选项 #1: 除了调用 TryApplyChanges 之外,您还可以调用 Solution.GetChanges 来找出与最初加载的内容相比发生了什么变化,然后调用各种获取更改文档并自行应用编辑的方法。这意味着您需要实际应用编辑——源文件编辑很容易(只需编写更新的文本),但如果您关心更复杂的事情,例如项目更改(adding/removing 引用),您不需要确实有办法利用 MSBuildWorkspace 对这类事情的支持。

选项 #2: Roslyn 的开源,因此您必须自己修改 MSBuildWorkspace 以允许这样的重定向,这将使您有可能尝试重用更多围绕项目操作的复杂逻辑。或者你可以只 copy/paste 应用的实现,然后使用 Solution.GetChanges 和重复使用的代码。