使用Roslyn编译时编译源代码

在CI服务器上的MSBuild任务中使用Roslyn编译之前是否可以修改源代码? 我已经成功地做了我想要的VS但是我想知道它是否可能在VS之外。 目前我正在研究Workspace API和编译器API,它们似乎是实现这一目标的正确工具,但我仍然不确定它是否可行? 特别是我担心返回我对MSBuild所做的更改以允许它继续工作。

这绝对是我们正在考虑的一个场景。 今天有一些问题让它变得有点困难:

  1. 您不能使用Workspace API来加载项目/解决方案,因为您已经在msbuild中。
  2. 要使用常规编译器API,您需要自己构建一个编译,这可能是一堆工作。

将来,我们想提供一个“从csc / vbc命令行字符串创建工作区”,这将使这更容易。

看看挂钩到编译器(csc.exe或vbc.exe)本身以及在MS Build Task中使用Roslyn的问题,以前的讨论。

关于在MS构建任务中使用Roslyn的问题 ,

public class MyTask : Task 

将任务更改为AppDomainIsolatedTask是一个快速修复。 我没有msdn帐户所以我会在这里发布。 希望它可以提供帮助。

我个人没有能够测试这个,(所以如果你愿意的话,把这个“答案”作为评论),但是阅读关于Roslyn的内容,尤其是这篇博客文章,它看起来应该是可能的 (寻找“重写” “段落。

显然,你可以从源代码构造一个语法树(对于我猜的编译器来说并不太令人惊讶),然后使用API​​修改它,最后将它写回字符串/文件或其他任何东西。

另请参阅MSDN关于Roslyn语法树的概念,以及关于“语法转换”的演练 。