• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C#中如何使用JS脚本

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

目前在做的组态软件中就使用到了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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap