1. 程式人生 > >C#中如何使用JS指令碼

C#中如何使用JS指令碼

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