2012-04-26 92 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帳戶,所以我只是在這裏發佈它。希望它可以幫助。