using System; using System.Collections.Generic; using System.Data.SqlTypes; using System.Linq; using System.Reflection; using System.Security.Policy; using System.Text; using System.Threading.Tasks; using Microsoft.CodeAnalysis.CSharp.Scripting; using Microsoft.CodeAnalysis.Options; using Microsoft.CodeAnalysis.Scripting; using Microsoft.CSharp; namespace OnDocScript { public class Script { public string script = ""; public List vars = new List(); public List Imports = new List(); public List Defaults = new List(); public string resultas = "JSON"; public object result; public int ErrorCode = 0; public string Error = ""; public Script() { SetImports(); } public Script(string connectionstring) { Defaults.Add(new Defaults("Connectionstring", connectionstring)); SetImports(); } public Script(string connectionstring, string ondocapikeyapikey) { Defaults.Add(new Defaults("Connectionstring", connectionstring)); Defaults.Add(new Defaults("OnDocAPIKey", ondocapikeyapikey)); SetImports(); } public void SetImports() { Imports.Add(new Imports("System", "")); Imports.Add(new Imports("System.Data", "")); Imports.Add(new Imports("System.IO", "")); //Imports.Add(new Imports("System.Net.Http", "System.Net.Http.dll")); Imports.Add(new Imports("Newtonsoft.JSON", "Newtonsoft.Json.dll")); } } public class ScriptVars { public string Variable = ""; public string ReplaceText = ""; public ScriptVars(string variable, string replacetext) { Variable = variable; ReplaceText = replacetext; } } public class Imports { public string ImportName = ""; public string DllName = ""; public Imports(string importname,string dllname) { ImportName = importname; DllName= dllname; } } public class Defaults { public string Name = ""; public string Value = ""; public Defaults(string name, string value) { Name = name; Value = value; } } public class Scripter { public void RunScript(ref Script script) { try { string scriptcode = script.script; foreach (ScriptVars sv in script.vars) { scriptcode = scriptcode.Replace("&&"+sv.Variable+"&&", sv.ReplaceText); } foreach (Defaults df in script.Defaults) { scriptcode = scriptcode.Replace("&&"+df.Name+"&&", df.Value); } //Imports und ImportOptinen var options = ScriptOptions.Default; string[] imports = new string[script.Imports.Count]; int cntimportdll = 0; int i = 0; foreach (Imports import in script.Imports) { imports[i] = import.ImportName; if (import.DllName.ToString() != "") { options = options.AddReferences(Assembly.LoadFrom(import.DllName)); } i = i + 1; } options.WithImports(imports); // Run Script var result = CSharpScript.EvaluateAsync(scriptcode, options); script.ErrorCode = 0; script.result = result.Result.ToString(); } catch (Exception ex) { script.ErrorCode = 400; script.Error = ex.Message; } } } }