C#中如何使用JS指令碼
阿新 • • 發佈:2018-12-29
C#中如何使用JS指令碼
目前在做的組態軟體中就使用到了js指令碼,這部分js指令碼是供使用者編寫的,使用者可以通過我們提供的指令碼以及js自身的邏輯,使用者就可以隨心所欲的控制裝置的執行。有比較了幾款在C#中執行js的庫,最後還是微軟大大自家的Microsoft.JScript這個穩定些,所以就使用Microsoft.JScript;來作為執行js的指令碼引擎。
以下是簡單使用的例子:
public object RunByJSCodeProvider(string scriptCode) { string md5 = DevCommon.MD5GenerateHashString(scriptCode); if (this.msjsAssemblyTypeList.ContainsKey(md5)) { Type _evaluateType = this.msjsAssemblyTypeList[md5]; object obj = _evaluateType.InvokeMember("JsRun", BindingFlags.InvokeMethod, null, null, null); return obj; } else { StringBuilder sb = new StringBuilder(); sb.Append("package Stdio{"); sb.Append(" public class JScript {"); sb.Append(" public static function JsRun() {"); sb.Append(scriptCode); sb.Append(" }"); sb.Append(" }"); sb.Append("}"); CompilerParameters parameters = new CompilerParameters(); parameters.GenerateInMemory = true; CodeDomProvider _provider = new Microsoft.JScript.JScriptCodeProvider(); CompilerResults results = _provider.CompileAssemblyFromSource(parameters, sb.ToString()); Assembly assembly = results.CompiledAssembly; Type _evaluateType = assembly.GetType("Stdio.JScript"); this.msjsAssemblyTypeList.Add(md5, _evaluateType); object obj = _evaluateType.InvokeMember("JsRun", BindingFlags.InvokeMethod, null, null, null); return obj; }
程式碼已提交至githubZZRRegion/StdioJS