不以物喜,不以己悲

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

posted @ 2018-12-29 21:38  这种人  阅读(3097)  评论(0编辑  收藏  举报