作爲this文章我想寫一點C#腳本引擎來工作。我曾嘗試這樣的代碼:Roslyn腳本 - 無「系統」腳本
System.IO.StreamReader sr = new System.IO.StreamReader("example.txt");
var prog = sr.ReadToEnd();
sr.Close();
ScriptOptions so = ScriptOptions.Default;
Console.WriteLine(CSharpScript.RunAsync(prog, so).Result.GetVariable("sum").Value);
Console.ReadKey();
而且example.txt中的文件內容:
System.IO.StreamReader sr = new System.IO.StreamReader("foo.txt");
string s = sr.ReadToEnd();
int sum = System.Convert.ToInt32(s);
現在我想限制用戶的C#只有基本功能(使用整型,字符串,而,for)和一些自定義函數,但不是整個.NET庫。但即使我不包含System.IO als引用,用戶也可以鍵入System.IO.something並且會得到正確的結果。
是否有可能從腳本中刪除對「系統」的訪問?
我很高興與任何答案。
你是什麼意思「**從腳本**」中刪除對「系統」的訪問? –
應該沒有任何可能使用系統的任何元素。例如。編寫腳本的用戶應該無法使用System.IO.StreamReader,System.Convert或System.Threading.Thread。 – pBuch
你想實現沙盒,還是禁用'System'命名空間中的任何東西?後者可以通過分析輸入代碼並檢查每個符號的命名空間來實現。前者可以通過將代碼加載到單獨的應用程序域中並指定應用程序域的權限來完成。 – Tamas