是否可以在CI服务器上的MSBuild任务中使用Roslyn进行编译之前修改源代码?我已经成功地在VS中做了我想要的但是我想知道在VS之外是否可能。目前我正在研究Workspace API和Compiler API,它们似乎是实现这一目标的正确工具,但我仍然不确定它是否可行?特别是我担心将我对MSBuild所做的更改返回以允许它继续工作。
答案 0 :(得分:10)
这绝对是我们正在考虑的情景。今天有一些问题让它变得有点困难:
将来,我们希望提供一个"从csc / vbc命令行字符串"创建工作区,这将使这更容易。
请先查看Hooking into the compiler (csc.exe or vbc.exe) itself和Problem 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关于“语法转换”的内容。