在 .NET 中执行 JavaScript 代码

eb24c256eb593d04644e333823b69c29.png

0a03506e727fb69bfedbd26ba6cbf2b3.gif

336e96ee41d8c8003ba205c9d3ab0d87.png

你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,实用的工具和组件,希望对您有用!

Jint 简介

如果您想在您的 .NET 程序中使用 Javascript,那么我推荐您使用 Jint。

Jint 是适用于 .NET 的 开源 Javascript 解释器,功能强大,它可以在任何现代 .NET 平台上运行,因为它支持 .NET Standard 2.0 和 .NET 4.6.2 以及更高版本),包括最新的 .NET 6。

因为 Jint 既不生成任何 .NET 字节码也不使用 DLR,所以在执行比较少的代码时,它的运行效率很快。

在 Nuget 包管理器中搜索并安装 Jint 即可,它没有其他的一些依赖。

小试牛刀

执行 JS 表达式,并输出结果。

using Jint;var engine = new Jint.Engine();var result = engine.Execute("1 + 2 + 3 + 4 + 5")                    .GetCompletionValue();
Console.WriteLine(result);
// Output: 15

这里,变量 x 设置为 3,并且 x * x 在 JavaScript 中进行计算,结果直接返回给 .NET 对象。

using Jint; var square = new Engine().SetValue("x", 3)     // 定义一个新变量 x.Evaluate( "x * x")   // 声明表达式.ToObject();          // 转换为 .NET objectConsole.WriteLine(square);// Output: 9

你可以直接把 .NET 中的对象实例传递给 JS 并使用它,它的修改在 .NET 和 JS 中保持同步。

var p = new Person
{Name = "Mickey Mouse"
};var engine = new Engine().SetValue("p", p).Execute("p.Name = 'Minnie'");Console.WriteLine(p.Name);// Output: "Minnie"

你可以直接在 .NET 中执行在 JS 定义的函数。

var engine = new Engine();var add = engine.Execute("function add(a, b) { return a + b; }").GetValue("add");var result = engine.Invoke("add",1,2);  Console.WriteLine(result);// Output: 3

您还可以使用 module 从多个脚本文件中导入和导出变量。

var engine = new Engine(options =>
{options.EnableModules(@"C:\Scripts");
})var ns = engine.ImportModule("./my-module.js");var value = ns.Get("value").AsString();

更多其他的高级用法,可以在 github 的 Jint 项目中找到。

项目地址

在 Dotnet工具箱 公众号内,回复 A111,即可获取项目地址。

37dcc5b3e8655a77c22257ae592c2422.jpeg

Dotnet 工具箱

扫码关注我们

2a53245ef13eced460b3f9e641a73b4b.png

分享

3d0a568fcbeafc47584e8867cb97708b.png

点收藏

661e2cf3c4bc048d15cd0a12b6d0777e.png

点点赞

d1562d35789dbc2ec5ce02b9db59bc94.png

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jmeter多用户登录跨线程组操作传值

项目需求: 需要登录两个用户A、B,用户A操作完后会通知B,然后B再操作,B操作完结束或者再通知A。 实现思路: 1. 设置两个线程组Ⅰ、Ⅱ,组Ⅰ添加cookie管理器,里面添加用户A的操作;组Ⅱ…

手动修改美化7zip图标 - 附替换文件

手动修改7zip图标理论知识制作ico图标文件替换资源重建图标缓存效果图替换文件7-Zip的自带图标是公认的丑,所以网上有很多7-Zip的图标美化工具,用的最多的就是 7-Zip Theme Manager,自带很多主题,但是最近我再使用7zTM修改图标是却…

.NET性能优化-复用StringBuilder

在之前的文章中,我们介绍了 dotnet 在字符串拼接时可以使用的一些性能优化技巧。比如:为StringBuilder设置 Buffer 初始大小使用ValueStringBuilder等等 不过这些都多多少少有一些局限性,比如StringBuilder还是会存在new StringBuilder()这样…

如何使用vue组件搭建网页并打包发布

vue组件化项目搭建及编译打包发布引言开发环境开发环境介绍开发环境安装使用模板创建项目编译及打包发布引言 最近开始学习Vue,Vue 是一个前端框架,特点是数据绑定和组件化。网上很多教程,数据绑定和组件学习起来也都不困难,但是…

Facebook揭秘其应用测试平台,并开源核心技术

本周,Facebook让一群记者参观了它位于俄勒冈州普赖恩维尔市的数据中心,在这个过程中也展示了他们的一个移动应用测试实验室,用来测试Facebook app、 Messenger 和Instagram。 目前 这个实验室总共含有60个机架,每个机架上放置32台…

责任链模式 职责链模式 Chain of Responsibility Pattern 行为型 设计模式(十七)

责任链模式(Chain of Responsibility Pattern)职责链模式意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系将这些对象连接成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。责任…

YOLOv7 在 ML.NET 中使用 ONNX 检测对象

本文介绍如何在 ML.NET 中使用 YOLOv7 的 ONNX 模型来检测图像中的对象。什么是 YOLOYOLO(You Only Look Once)是一种先进的实时目标检测系统。它是一个在COCO数据集上预训练的物体检测架构和模型系列,其版本也是在不断优化更新。2022年7月&a…

NppFTP小插件的使用

大家在Linux系统中配置运行环境时,一定会遇到相关配置文件的修改,虽说在Linux系统中可以使用vi,vim的命令进行文本编辑,但是操作起来还是没有在Windows系统中用的爽,特别是操作大文本量的文件时。Notepad里提供了一个小插件&#…

『实战』使用Excel催化剂二维码功能批量生成带不同图案二维码。

熟悉Excel催化剂的老读者都知道,每逢图书大促,笔者都会向出版社申请优惠码优惠券来惠及广大粉丝。当然公众号上帮出版社推荐图书,会有佣金回报,这也是笔者唯一能接受的推广方式。公众号自创立以来,没有接过软文&#x…

JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据。说白了就是能够直接将一个C#对象传送到前台页面成为javascript对象。要添加System.Web.Extensions.dll的引用。该类位于System.Web.Script.Serialization命…

使用vue组件搭建网页应用

使用vue组件搭建网页应用搭建开发环境开发组件搭建开发环境 搭建一个 vue 项目最快的方式就是使用 vue cli 脚手架进行初始化,包含了所有完整的依赖及开发配置。 首先全局安装 vue cli,打开 cmd 命令提示符 或者 power shell,输入以下命令&…

重新整理 .net core 实践篇 —linux上排查问题实用工具 [外篇]

前言介绍下面几个工具:Lldbcreatedumpdotnet-dumpdotnet-gcdumpdotnet-symbolProcdump该文的前置篇为:https://www.cnblogs.com/aoximin/p/16839812.html献给初学者,这篇就只介绍下看下日志和lldb,毕竟东西太多了。正文我以官网的例子作为演示&#xff1…

Office 365离线安装

Office 365除了可以在线安装外,还可以进行离线安装,但激活还是需要连接互联网的哟首先下载Office部署工具https://www.microsoft.com/en-us/download/details.aspx?id49117 下载文件后,运行自解压缩可执行文件,其中包含 Office 部…

reduceByKey和groupByKey区别与用法

2019独角兽企业重金招聘Python工程师标准>>> 在Spar看中,我们知道一切的操作都是基于RDD的。在使用中,RDD有一种非常特殊也是非常实用的format——pair RDD,即RDD的每一行是(key, value)的格式。这种格式很…

软件工程的第一性原理丨SmartIDE

作者:徐磊原文地址:https://smartide.cn/zh/blog/2022-1022-software-engineering/徐磊英捷创软科技(北京)有限公司创始⼈/⾸席架构师 / CEO / SmartIDE开源项⽬创始⼈。微软最有价值专家MVP,微软区域技术总监&#xf…

排序算法之快速排序详解

一、算法介绍 快速排序:快速排序的基本思想是通过一次排序将等待的记录分成两个独立的部分,其中一部分记录的关键字小于另一部分的关键字。C部分的快速排序一直持续到整个序列被排序。 任取一个元素 (如第一个) 为中心提出所有小于它的元素,并…

openstack 中国联盟公开课參会总结

主流趋势 1. openstack defcore 互操作性认证。打通不同的openstack 厂商之间的连接2. 首批OpenStack管理员认证(COA)将于2016年进行3. 混合云应用广泛 Cloud Broker,cascading openstack 云连接器4. DevOps5. 虚拟桌面6. Storage 方面,Ceph和Glusterfs 7. Network…

Re:从零开始的Vue项目搭建

Re:从零开始的Vue项目搭建初始的终结与结束的开始Nodejs项目的简单测试从零开始webpack开发模式webpack编译打包后记初始的终结与结束的开始 最开始接触vue项目搭建是从vue-cli开始,模板式操作,一键搞定,几乎可以无缝进入代码开发…

C# WPF 用代码画一幅图(*精品*)

概述有时候我们的程序界面中需要显示一些简单的示意图,一般我们有原图的话直接嵌入我们程序就可以,但有时候我们没有原图,这时候我们不妨用代码自己画出来.今天小编要给大家展示的是这样一副图片:接下来,我就用代码纯手…

矿难让显卡压了那么多货咋办?NV如是说

2019独角兽企业重金招聘Python工程师标准>>> 在苏州 GTC 开幕的几天前,英伟达刚刚遭遇了一次股价的腰斩。 近来加密货币的热度渐低,受到挖矿热潮照顾许多的英伟达「矿机」销量受到打击,甚至出现了严重的库存危机,加上近…