使用Roslyn编译时编译源代码

时间:2012-04-26 07:07:06

标签: c# .net msbuild roslyn

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

3 个答案:

答案 0 :(得分:10)

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

  1. 您无法使用Workspace API加载项目/解决方案,因为您已经在msbuild中。
  2. 要使用常规编译器API,您需要自己构建一个编译,这可能是一堆工作。
  3. 将来,我们希望提供一个"从csc / vbc命令行字符串"创建工作区,这将使这更容易。

    请先查看Hooking into the compiler (csc.exe or vbc.exe) itselfProblem with using Roslyn in a MS Build Task,然后再进行一些讨论。

答案 1 :(得分:3)

关于 Problem with using Roslyn in a MS Build Task的问题,

  public class MyTask : Task

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

答案 2 :(得分:1)

我个人无法对此进行测试,(如果你愿意的话,可以将这个“答案”视为评论),但阅读有关Roslyn的内容,特别是this博客条目,它看起来应该是possible(寻找“重写”段落。

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

另请参阅MSDN概念性的Roslyn语法树,以及walkthrough关于“语法转换”的内容。