2012-04-26 89 views
19

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

+1

好问题,最近我一直在想这类东西。 – 2012-04-26 07:49:57

回答

9

这绝对是我们正在考虑的情景。今天有几个问题使其有点困难:

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

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

看一下Hooking into the compiler (csc.exe or vbc.exe) itselfProblem with using Roslyn in a MS Build Task对于此前的一些讨论。

+0

谢谢Kevin Kevin期待您的团队拥有新的Roslyn功能! – 2012-04-26 20:15:03

+0

我知道这是从2012年起。有没有关于这方面的消息?现在有一个简单的方法吗? – riki 2016-10-24 19:23:50

1

我还没有亲自测试过这个(所以如果你愿意的话,可以把这个“答案”作为评论),但是阅读关于Roslyn的东西,特别是this博客条目,它看起来应该是possible(看对于“Rewrite”段落,

显然,你可以从源码构造一个语法树(对于编译器来说我不会感到奇怪),然后使用API​​修改它,最后把它写回到字符串/文件或者其他任何东西

关于Roslyn语法树的概念,请参阅MSDN关于“Syntax Transformation”

2

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

public class MyTask : Task 

改变任务以AppDomainIsolatedTask是速战速决。我没有msdn帐户,所以我只是在这里发布它。希望它可以帮助。