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