23

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

4

3 回答 3

10

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

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

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

看一下Hooking into the compiler (csc.exe or vbc.exe) 本身Problem with using Roslyn in a MS Build Task以了解之前的一些讨论。

于 2012-04-26T17:13:08.387 回答
3

关于在 MS Build Task 中使用 Roslyn 的问题

  public class MyTask : Task

将 Task 更改为 AppDomainIsolatedTask 是一种快速修复。我没有msdn帐户,所以我将在此处发布。希望它可以提供帮助。

于 2012-07-06T14:26:55.627 回答
1

我个人无法对此进行测试,(因此,如果您愿意,请将此“答案”视为评论),但是阅读有关 Roslyn 的内容,尤其是博客条目,看起来应该是可能的(查找“重写“ 段落。

显然,您可以从源代码构造一个语法树(我猜对于编译器来说这并不奇怪),然后使用 API 对其进行修改,最后将其写回字符串/文件或其他任何内容。

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

于 2012-04-26T12:11:44.297 回答