net生活

博客园 首页 新随笔 联系 订阅 管理
  30 Posts :: 0 Stories :: 496 Comments :: 26 Trackbacks

以前在用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.编译成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);
 }


}

 

4.编译成exe(因为要使用js.net的类﹐所以必须加入Microsoft.JScript这个参考)

csc /r:Microsoft.JScript.dll /r:MyEval.dll test.cs

 

5.执行test.exe

我们可以看到结果为"失败"

 

 

 

posted on 2005-06-01 07:21 Kevin Zou 阅读(2968) 评论(8)  编辑 收藏 网摘 所属分类: asp.net

Feedback

#1楼 2005-06-01 13:42 bobo
这个功能之前我在CSDN上问了N久也没人答,后来只找到用codedom来做的,怎么我就想不到还有Jscript这个命名空间里的方法可用呢?
  回复  引用    

#2楼 2005-06-01 15:07 ttyp      
想法不错
  回复  引用  查看    

#3楼 2005-06-01 16:10 Microshaoft      
// csc.exe noname1.cs /r:C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Microsoft.JScript.dll
public class Class1
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello World");
string Expression = "var result:int =0;result==1?\"成功\":\"失败\"";
Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
System.Console.WriteLine( Microsoft.JScript.Eval.JScriptEvaluate(Expression,ve));
System.Console.ReadLine();
}
}

  回复  引用  查看    

#4楼 2005-06-01 16:22 Microshaoft      
看看 MVP 2002 秋水无恨 的四种方式的全面对比把:
http://blog.csdn.net/qiushuiwuhen/archive/2002/12/16/14122.aspx">http://blog.csdn.net/qiushuiwuhen/archive/2002/12/16/14122.aspx

  回复  引用  查看    

好东东. 赞一个
  回复  引用    

#6楼 2005-06-03 17:25 江中鱼
巧妙的利用了脚本的特性!
  回复  引用    

#7楼 2006-05-19 10:55 torome      
好文,
  回复  引用  查看    

#8楼 2007-07-13 00:06 朕[未注册用户]
经典。
  回复  引用    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 165693




相关文章:

相关链接: