2011-02-13 73 views
2

我需要在ASP.NET頁面上有一個文本框,用戶可以粘貼代碼並選擇一種預設語言(C#,VB.NET,Python,Ruby等)和我需要驗證代碼是否成功編譯。如果沒有,那麼我需要用行號顯示錯誤和警告。從ASP.NET網站編譯代碼

我該如何去做這件事?

回答

6

您將需要託管各種您希望支持的編譯器並使用它們的API。如果編譯器不公開API,則需要使用System.Diagnostics.Process來啓動它並獲取輸出以進行解析。

雖然這遠不是​​一項簡單的任務。
如果你確信你需要這個,問問自己幾個問題。

  • 您打算支持哪些語言,平臺和語言? Python和Ruby,你的意思是.NET版本還是你想使用他們的標準編譯器?哪些版本?
  • 這些編譯器是否有任何公共API?你需要將它們作爲可執行文件運行嗎?
  • 如果網站將被許多用戶同時使用,您打算如何分配負載?編譯是一個密集的過程,有很多人這樣做會使服務器過載。另外請注意,編譯總是需要時間,因此您需要考慮如何將其呈現給用戶。你希望它立即開始還是你想讓用戶排隊?
  • 什麼是用戶編碼範圍?用戶輸入是否限於一種方法內容,或用戶是否必須寫入整個文件?系統默認添加了任何代碼嗎?你如何解決參考文獻爲C#代碼?是否有一些庫默認引用?

而這只是冰山一角。

回答您的評論,是的,C#和VB .NET有一個編譯器API,稱爲CodeDOM
網絡上有大量關於它的信息。您可能還想查看this question

+0

如果我想從C#和VB.NET開始,你碰巧知道API是否暴露給我做編譯? – Dusty 2011-02-13 22:48:26

0

您可能想看看昨天發佈的http://msdn.microsoft.com/en-us/roslyn的Roslyn項目(以前稱爲編譯器即服務)。這是針對C#和VB的新編譯器API。它不會對Python或Ruby有所幫助,但它應該在C#和VB發佈後發佈(Dev 11之後)。

0

對於C#和VB,使用Roslyn CTP創建編譯對象,然後調用GetDiagnostics()方法來確定錯誤。