這不是真的用於實際使用,但有什麼方法可以在C#中執行字符串作爲程序代碼嗎?作爲字符串的程序代碼
例如:
,而不需要編寫
Console.WriteLine("blah blah blah");
我想寫點東西像
string s = "Console.WriteLine(\"blah blah blah\")"
execute(s);
這不是真的用於實際使用,但有什麼方法可以在C#中執行字符串作爲程序代碼嗎?作爲字符串的程序代碼
例如:
,而不需要編寫
Console.WriteLine("blah blah blah");
我想寫點東西像
string s = "Console.WriteLine(\"blah blah blah\")"
execute(s);
這可以使用Microsoft.CSharp.CSharpCodeProvider完成。
檢查this。
我能想到這樣做的唯一方法是通過在運行時編譯代碼。這裏有一篇文章解釋瞭如何做到這一點http://simeonpilgrim.com/blog/2007/12/04/compiling-and-running-code-at-runtime/
你可以使用CodeDOM來做到這一點。請參閱MSDN上的Using the CodeDOM。
我知道這不完全是你要求的(雖然你沒有提到字符串中程序的語言),但IronPython非常酷:http://secretgeek.net/host_ironpython.asp,http://blogs.msdn.com/b/abhinaba/archive/2006/02/09/528416.aspx。
而且(已經提到博卡)運行時編譯的工作也很好:Is it possible to dynamically compile and execute C# code fragments?
,它在C#可能,但它是故意困難。沒有簡單的「exec()」功能,您可以直接使用。
AFAIK這是由設計。 Exec的功能是巨大的安全漏洞,因爲它們將語言的全部功能暴露給通常不應該擁有這種能力的用戶。作爲程序員,您經常打算使用exec()函數來允許用戶輸入簡單的數學或字符串表達式,並且突然間有一名黑客出現並實例化一個System.Net.WebClient並使用它來下載並執行某些操作更惡意。沒有辦法限制哪些組件被允許。
.Net語言的首選替代方法是所謂的Domain Specific Language (DSL)。 DSL是一種(相對)簡單的方式來定義自己的語法(及其背後的含義),以便讓用戶可以執行什麼類型的操作,而無需爲訪問整個基類庫提供安全隱患。它還具有使您能夠提供比其他方式更高級別的專業化操作的優勢。
[動態代碼生成]的可能重複(http://stackoverflow.com/questions/1748149/dynamic-code-generation) –