Мой клиент хочет добавить пользователям возможность определять небольшие сценарии, которые можно использовать для выполнения различных вычислений в уже существующем веб-приложении.В настоящее время мы изучаем использование CSharpScripts в Microsoft.CodeAnalysis.Scripting.CSharp для динамической компиляции и выполнения пользовательских функций.
Мне бы хотелось иметь возможность изолированной среды этих сценариев.В частности, я хотел бы наложить ограничения на ресурсы (память и т. Д.), Которые может использовать скрипт, а также ограничить доступ к библиотекам или значениям скрипта (например, я не хочу, чтобы пользователь делал вызовы веб-служб в своем скрипте).Я хочу избежать случая, когда пользователь пишет код, который негативно влияет на остальную часть приложения.
Ниже приведен пример кода
private static Script<double> GetCompiledScript(string userFunction)
{
var options = ScriptOptions.Default.AddReferences(References).AddImports(Imports);
var script = CSharpScript.Create<double>(expression, options, typeof(Globals));
script.Compile();
return script;
}
public static String[] Imports => new[]
{
"System",
"System.Linq",
"System.Collections.Generic"
};
public static Assembly[] References => new[]
{
typeof(System.Object).GetTypeInfo().Assembly,
typeof(System.Linq.Enumerable).GetTypeInfo().Assembly,
};
public class Globals
{
public Dictionary<string, double> vars { get; set; }
}