博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在net中实现动态执行代码(js的eval)的功能?
阅读量:6982 次
发布时间:2019-06-27

本文共 823 字,大约阅读时间需要 2 分钟。

以前在用js时候﹐经常使用它的eval方法来完成动态代码的执行。

但是net中好像没有什么好的办法来代替它﹐虽然好像有一个代码编译类﹐但是它太复杂了﹐对于一段简单代码的执行实在是得不偿失。
今天在与同事讨论工作流时﹐听到了它的动态代码节点,居然找到了我很久以来一直想要用到的功能,不
敢独享﹐与大家分享。

原理﹕

使用js.net(因为里面有eval方法)编写一个类﹐类别中新增一个方法来执行动态js代码。
然后使用jsc.exe把它编译成一个dll
在c#项目中把它加入﹐然后传入动态代码﹐呼叫这个类别的这个方法﹐得到结果。
 
1.第一步﹐新增一个js文件
MyEval.js

 

1
None.gif
class MyEval{
2
None.gif 
function
 execute(code:String) :String {    
//
 Method.
3
None.gif
  
return
 eval(code);
4
None.gif }
5
None.gif
6
None.gif}
7
None.gif

 

2.编译成dll

None.gif
jsc /target:library /out:MyEval.dll MyEval.js

 

3.编写测试文件

TestEval.cs

 

None.gif
using
 System;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
class
 test
dot.gif
{
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif 
public static void Main()dot.gif{
InBlock.gif  
string code = "var result:int =0;result==1?\"成功\":\"失败\"";
InBlock.gif  MyEval eval 
= new MyEval();
InBlock.gif  
string result = eval.execute(code);
InBlock.gif  Console.WriteLine(
"The Result is:" + result);
ExpandedSubBlockEnd.gif }
InBlock.gif
ExpandedBlockEnd.gif}
None.gif

 

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

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

 

5.执行test.exe

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

 

 

 

转载地址:http://yvtpl.baihongyu.com/

你可能感兴趣的文章
怎么将图片上传封装成指令?
查看>>
leetcode讲解--861. Score After Flipping Matrix
查看>>
聊聊JavaScript和Scala的表达式 Expression
查看>>
[原]数据科学教程: 如何使用 mlflow 管理数据科学工作流
查看>>
超详细Dkhadoop虚拟机安装图文教程
查看>>
JAVA 8 函数式接口--Supplier
查看>>
Dockerfile多阶段构建原理和使用场景
查看>>
七牛云赵之健:多维度融合赋能视频 AI 的实践
查看>>
CSS3中的box-sizing
查看>>
gracehttp: 优雅重启 Go 程序(热启动 - Zero Downtime)
查看>>
云计算新风向:多云战略优化企业云支出
查看>>
【跃迁之路】【478天】刻意练习系列237(2018.05.29)
查看>>
Windows改Linux(一),新建Ubuntu虚拟机小白向导
查看>>
HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试
查看>>
关于一个插图的翻译
查看>>
Spring Cloud构建微服务架构:分布式服务跟踪(入门)【Dalston版】
查看>>
【355天】跃迁之路——程序员高效学习方法论探索系列(实验阶段113-2018.01.26)...
查看>>
Rust编程语言的核心部件
查看>>
CSS(颜色_字体)
查看>>
BZOJ 1061: [Noi2008]志愿者招募【单纯形裸题】
查看>>