2011-04-05 107 views
0

有誰知道是否有方法在運行時評估c#代碼。 例如。我想允許用戶輸入DateTime.Now.AddDays(1)或其他類似的字符串,然後計算字符串以獲得結果。C#動態代碼評估,Eval,REPL

如果可以訪問emmediate窗口功能,我可能會操作,因爲它似乎是對動態輸入的每一行進行評估。

我發現VB有一個來自VBA * .dll的未公開的EbExecuteLine()API函數,並且懷疑是否存在某些與c#等價的東西。

我還發現了一個自定義工具https://github.com/DavidWynne/CSharpEval(它使用的是在kamimucode.com但筆者已搬遷至GitHub的),似乎這樣做,但我寧願東西,來作爲.NET程序

部分

感謝

+0

相關問題... HTTP看到://stackoverflow.com/questions/1660452/c-interpreter-without-compilation – 2011-04-05 08:38:20

回答

0

微軟的C#編譯器還沒有編譯器即服務(應該隨C#5.0一起提供)。

您可以使用Mono's REPL,或使用CodeDOM

0

它不是快寫自己的服務,但你可以編譯在運行的代碼,看到我previous question

一旦你的裝配,你知道類型名稱可以使用反射構建已編譯類的實例並執行您的方法..

1

正如您可能已經看到的,在運行時沒有用於評估C#代碼的內置方法。這是您提到的自定義工具存在的主要原因。

我也有一個C#eval程序,允許評估C#代碼。它提供了在運行時評估C#代碼並支持許多C#語句。實際上,這個代碼可以在任何.NET項目中使用,但是它僅限於使用C#語法。看看我的網站,http://csharp-eval.com,瞭解更多詳情。

0

O2平臺的C# REPL Script Environment使用Fluent# API,它們具有真正強大的反射API,允許您執行代碼片段。

例如:

"return DateTime.Now.ToLongTimeString();".executeCodeSnippet(); 

將返回

5:01:22 AM 

注executeCodeSnippet的「......」()。實際上可以執行任何有效的C#代碼片段(所以它非常強大)。

如果你想控制你的用戶纔可以執行,我可以用AST樹LIMITE,他們可以訪問C#的功能。

而且看看微軟的Roslyn,這是非常強大的,你可以在Multiple Roslyn based tools (all running Stand-Alone outside VisualStudio)