Начиная с this статьи Я хочу написать небольшой скриптовый движок C# для работы. Я попробовал этот код:Roslyn Scripting - скрипт без «системы»
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# (с помощью INT, строка, в то время как , for) и некоторые самоопределяемые функции, но не всю библиотеку .NET. Но даже если я не включу ссылку System.IO, пользователь может набрать System.IO.something и получит правильное решение.
Есть ли возможность, чтобы удалить доступ к «Системе» из сценария?
Я рад любому ответу.
Что вы подразумеваете под «** удалить доступ к« Системе »из сценария **"? –
Нельзя использовать какой-либо элемент системы. Например. пользователь, который пишет сценарий, не может использовать System.IO.StreamReader, System.Convert или System.Threading.Thread вообще. – pBuch
Вы хотите выполнить песочницу или отключить использование чего-либо в пространстве имен 'System'? Последнее может быть достигнуто путем анализа вашего входного кода и проверки пространства имен каждого символа. Первое можно сделать, загрузив код в отдельный домен приложения и указав разрешения домена приложения. – Tamas