You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
3.9 KiB

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<ScriptVars> vars = new List<ScriptVars>();
public List<Imports> Imports = new List<Imports>();
public List<Defaults> Defaults = new List<Defaults>();
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;
}
}
}
}