zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【Mysql学习笔记】浅析mysql的binlog
    HBase 学习笔记---守护进程及内存调优
    字符集例子-同一字符不同字符集编码不同及导入导出的乱码
    随机访问
    格式化的代价
    读写文本文件
    缓冲
    加速I/O的基本规则
    序列化再探讨
    数据库I/O:CMP、Hibernate
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/10198033.html
Copyright © 2011-2022 走看看