以前在用js时候﹐经常使用它的eval方法来完成动态代码的执行。
但是net中好像没有什么好的办法来代替它﹐虽然好像有一个代码编译类﹐但是它太复杂了﹐对于一段简单代码的执行实在是得不偿失。
今天在与同事讨论工作流时﹐听到了它的动态代码节点,居然找到了我很久以来一直想要用到的功能,不
敢独享﹐与大家分享。
原理﹕
使用js.net(因为里面有eval方法)编写一个类﹐类别中新增一个方法来执行动态js代码。
然后使用jsc.exe把它编译成一个dll
在c#项目中把它加入﹐然后传入动态代码﹐呼叫这个类别的这个方法﹐得到结果。
1.第一步﹐新增一个js文件
MyEval.js
1class MyEval{
2 function execute(code:String) :String { // Method.
3 return eval(code);
4 }
5
6}
7
2 function execute(code:String) :String { // Method.
3 return eval(code);
4 }
5
6}
7
2.编译成dll
jsc /target:library /out:MyEval.dll MyEval.js
3.编写测试文件
TestEval.cs
using System;
class test{
public static void Main(){
string code = "var result:int =0;result==1?\"成功\":\"失败\"";
MyEval eval = new MyEval();
string result = eval.execute(code);
Console.WriteLine("The Result is:" + result);
}
}
class test{
public static void Main(){
string code = "var result:int =0;result==1?\"成功\":\"失败\"";
MyEval eval = new MyEval();
string result = eval.execute(code);
Console.WriteLine("The Result is:" + result);
}
}
4.编译成exe(因为要使用js.net的类﹐所以必须加入Microsoft.JScript这个参考)
csc /r:Microsoft.JScript.dll /r:MyEval.dll test.cs
5.执行test.exe
我们可以看到结果为"失败"