我目前正在編寫一些代碼,我想知道是否可以從我的應用程序執行一些C#代碼。我會給你一個想法,讓我們說我想給用戶一個文本框,讓他們鍵入一些代碼,然後打開,我想他們要求一個水果列表,然後通過每個水果,並輸出它..一個例如:有沒有辦法在應用程序中解析/運行C#,就像腳本一樣?
var fruitList = getFruit();
foreach(var fruit in fruitList)
{
print(fruit.Name);
}
我希望能夠通過這個和分配水果對象fruitList列表,解析器應該能夠getFruit()綁到我寫在C#中的方法碼。打印也是如此,它應該將它等同於我寫的將輸出到文本框的打印函數。
現在我知道C#不是一個腳本,它被編譯,我做了很多谷歌搜索,但無法找到任何東西。我唯一的選擇似乎是自己編寫一個小語言解析器 - 這聽起來很有趣 - 但我之前完成了這個工作,而且我知道這很難。所以這只是一個初步檢查,看看在我承諾長期以前是否存在某種解決方案。
所以,我的同事程序員,你知道任何可能能夠幫助我嗎?
如果不是,沒問題,我非常感謝所有反饋,無論是提示,建議,鏈接到文章,如http://blogs.msdn.com/b/ericwhite/archive/2010/06/29/writing-a-recursive-descent-parser-using-c-and-linq.aspx或解決方案。
問候,
亞當
編輯:我已經得到了一個工作示例。注意這段代碼有點亂,因爲我已經將一些其他代碼粘貼到測試應用程序中,但它可以工作。基本上,我將代碼編譯成DLL,然後加載DLL,找到類型,找到方法並調用它。這太快了!我不想垃圾郵件你這麼完整的代碼如下:
http://imdsm.blogspot.com/2012/01/compile-c-into-assembly-then-load-it.html
感謝大家誰張貼在這裏。你剛剛救了我幾天的困惑!
確實很有意思 - 不完全確定它是正確的解決方案,除非可能生成剩餘的代碼並將其添加到編譯中 - 但是,我仍然擔心這個執行時間。但是,感謝您的鏈接! – 2012-01-09 12:39:49
CSharpCodeProvider將非常快速,因爲編譯的成本只發生一次。 A-la IronRuby在加載後也應該沒問題,但它是一個完整的腳本環境+您可以在這些語言中獲得通常的腳本運行時。 – 2012-01-09 14:14:25