.Net C#执行JavaScript脚本

文章目录

  • 前言
  • 一、安装
  • 二、执行 JavaScript 脚本
  • 三、与脚本交互
  • 四、JS 调用 C# 方法
  • 五、多线程使用
  • 总结


前言

    ClearScript 是一个 .NET 平台下的开源库,用于在 C# 和其他 .NET 语言中执行脚本代码。它提供了一种方便和安全的方法来将脚本与应用程序集成,并允许将应用程序暴露给脚本以进行更高级别的自定义和交互。


一、安装

二、执行 JavaScript 脚本

using var engine = new V8ScriptEngine();
engine.Execute("var a = 10; var b = 20; var c = a + b;");
var result = engine.Script.c;
Console.WriteLine(result); // 输出 30

三、与脚本交互

    在执行 JavaScript 脚本时,可以将 C# 对象传递给脚本,以便脚本可以访问这些对象。要将对象传递给脚本,需要使用 AddHostObject() 方法将对象添加到 JavaScript 引擎中。

/// <summary>
/// Person类需要为Public,V8引擎才能正常访问
/// </summary>
public class Person
{public string? Name { get; set; }public int Age { get; set; }
}/// <summary>
/// JS与C#交互
/// </summary>
static void InteractionBetweenJsAndCsharp()
{using var engine = new V8ScriptEngine();var person = new Person { Name = "沙漠尽头的狼", Age = 18 };engine.AddHostObject("person", person);engine.Execute("var c = person.Name + ' 才 ' + person.Age + ' 岁呀?';");var result = engine.Script.c;Console.WriteLine(result); // 沙漠尽头的狼 才 18 岁呀?
}

四、JS 调用 C# 方法

    除了将 C# 对象传递给 JavaScript 外,还可以在 JavaScript 中调用 C# 方法。要在 JavaScript 中调用 C# 方法,需要创建一个包含方法的类,并使用 AddHostObject() 方法将该类添加到 JavaScript 引擎中。

/// <summary>
/// JS调用C#的方法
/// </summary>
static void JsCallCSharpMethod()
{using var engine = new V8ScriptEngine();var calculator = new Calculator();engine.AddHostObject("calculator", calculator);engine.Execute("var result = calculator.Add(15, 20)");var result = engine.Script.result;Console.WriteLine(result); // 35
}public class Calculator
{public int Add(int a, int b){return a + b;}
}

五、多线程使用

    ClearScript 还支持在多个线程中使用 JavaScript 引擎。要在多个线程中使用 JavaScript 引擎,需要创建多个 JavaScript 引擎实例,并使用各自的线程来执行脚本。

using System.Threading.Tasks;
using Microsoft.ClearScript.V8;var engine1 = new V8ScriptEngine();
var engine2 = new V8ScriptEngine();Task.Run(() =>
{engine1.Execute("var a = 'Hello from thread 1!'");
});Task.Run(() =>
{engine2.Execute("var b = 'Hello from thread 2!'");
});

总结

    本文介绍了 ClearScript 的使用方法和特点,包括如何在 C# 中执行 JavaScript 脚本、如何与脚本交互、如何调用 C# 方法、多线程使用等方面的内容。ClearScript 提供了一种方便和安全的方法来将脚本与应用程序集成,并允许将应用程序暴露给脚本以进行更高级别的自定义和交互。通过使用 ClearScript,可以为应用程序添加灵活性和可扩展性,并在应用程序中实现动态脚本执行功能。

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

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

相关文章

PHP酒店宾馆民宿多商户版系统小程序源码

解锁酒店新境界&#xff01;揭秘多商户版系统的无限可能&#x1f3e8;✨ &#x1f680; 开篇&#xff1a;酒店业的新革命&#xff0c;多商户版系统来袭&#xff01; 你是否梦想过将你的酒店打造成一个集餐饮、娱乐、购物于一体的综合型休闲空间&#xff1f;现在&#xff0c;这…

【linux】服务器卸载cuda

【linux】服务器卸载cuda 文章目录 【linux】服务器卸载cuda1、查找已安装的 CUDA 包&#xff1a;2、卸载 CUDA&#xff1a;3、删除残留文件4、更新系统的包索引&#xff1a;5、检查是否卸载干净&#xff1a; 1、查找已安装的 CUDA 包&#xff1a; dpkg -l | grep cuda2、卸载…

【JavaScript】深入理解Promise:从基础概念到进阶用法、手写promise

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、Promise概述1. Promise的定义2. Promise的用途3. Promise的三种状态4. Promise的构造函数和基础结构5. Promise的优点6. Promise的实例方法7. Promise的静态方法 三、Promise的基本用法1. 创建一个Promise2. th…

The First项目报告:引领L2解决方案新纪元的模块化协议AltLayer

在区块链演进中&#xff0c;可扩展性与定制化成为开发者核心诉求。ZK Rollups与Optimistic Rollups虽显著提升以太坊等区块链性能&#xff0c;却面临访问性、定制难、中心化风险及流动性分散等挑战。AltLayer以Rollups-as-a-Service创新模式&#xff0c;赋予开发者直接管理roll…

python class

继承 看下Python中继承的语法&#xff1a; class DerivedClassName(BaseClassName):<statement-1>...<statement-N>复制代码 如果基类定义在另一个模块中的时候&#xff1a; class DerivedClassName(modname.BaseClassName):

【漏洞复现】飞企互联-FE企业运营管理平台——uploadAttachmentServlet——文件上传

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据…

Linux用户和用户组的创建和添加

创建用户组 在Linux中创建用户组&#xff0c;您可以使用groupadd命令&#xff0c;后跟用户组名称。例如&#xff0c;要创建一个名为newgroup的用户组&#xff0c;您可以执行以下命令&#xff1a; sudo groupadd newgroup创建用户 创建用户&#xff0c;您可以使用useradd命令&am…

平安养老险山西分公司开展2024年“7.8全国保险公众宣传日”活动

为深入贯彻新发展理念和中央金融工作会议、中央经济工作会议精神&#xff0c;推动保险行业形象持续向好&#xff0c;根据中保协《关于印发<2024年“7.8全国保险公众宣传日”活动方案>的通知》和山西省保险行业协会《山西保险业2024年“7.8全国保险公众宣传日”活动方案》…

在误装Windows server2019 后如何利用Windows.old恢复?

&#x1f3c6;本文收录于《CSDN问答解惑》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

DevExpress(WinForms WPF)中文教程 - 如何减小文档文件大小?

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress近期重要版本v24.1已正式发布&#xff0c;该版本拥有众多新产…

PlugLink 与 AI 大模型:深入 COZE API 链接实践(附源码)

在这个技术日新月异的时代&#xff0c;AI 不再是遥不可及的概念&#xff0c;而是逐渐成为我们日常生活与工作中不可或缺的一部分。作为技术领域的探路者&#xff0c;我深感荣幸地向大家介绍 PlugLink —— 一个旨在简化 AI 应用集成并促进跨领域协作的开源平台&#xff0c;以及…

开源数字人项目Hallo

硬件条件&#xff1a; gpu最低12G 软件&#xff1a; cuda需支持 Python选择3.10吧&#xff0c;我的版本3.11 源码&#xff1a; GitHub - fudan-generative-vision/hallo: Hallo: Hierarchical Audio-Driven Visual Synthesis for Portrait Image Animation models文件&…

阅读笔记——《Fuzz4All: Universal Fuzzing with Large Language Models》

【参考文献】Xia C S, Paltenghi M, Le Tian J, et al. Fuzz4all: Universal fuzzing with large language models[C]//Proceedings of the IEEE/ACM 46th International Conference on Software Engineering. 2024: 1-13.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&…

android paddingStart paddingLeft 使用区别

在 Android 开发中&#xff0c;paddingStart 和 paddingLeft 都是用来设置视图的内边距&#xff0c;但它们有一些重要的区别&#xff0c;尤其是在处理国际化和不同的布局方向&#xff08;LTR 和 RTL&#xff09;时&#xff1a; paddingLeft: 设置视图内容左侧的内边距。只在从左…

科研绘图系列:python语言实验线图(line Chart)

介绍 两组数据在不同时间点的差异检验结果线图 导入包 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from scipy import stats输入数据 ctr = [2, 2, 3, 3, 4, 5, 5, 6, 4, 8, 6, 6, 9, 11, 12, 12, 15, 16, 20, 25, 27] drug = [2, 3, …

python开发prometheus exporter--用于hadoop-yarn监控

首先写python的exporter需要知道Prometheus提供4种类型Metrics 分别是&#xff1a;Counter, Gauge, Summary和Histogram * Counter可以增长&#xff0c;并且在程序重启的时候会被重设为0&#xff0c;常被用于任务个数&#xff0c;总处理时间&#xff0c;错误个数等只增不减的指…

查看wsl 版本

要查看Windows Subsystem for Linux (WSL) 的版本&#xff0c;您通常需要查看WSL的版本号以及正在运行的Linux发行版的版本。以下是检查这两个版本的方法&#xff1a; 1. 查看WSL的版本&#xff08;WSL 1 或 WSL 2&#xff09; 要检查您的计算机上是否启用了WSL 2&#xff0c…

如何录制屏幕视频?4款软件,轻松录屏

在数字化飞速发展的时代&#xff0c;如何录制屏幕视频已经成为我们工作、学习和娱乐中不可省略的一个重要问题。无论是制作教学教程还是录制游戏视频等&#xff0c;屏幕视频录制都为我们提供了极大的便利。今天&#xff0c;就让我们一起探索如何录制屏幕视频的精彩方式&#xf…

多数据源配置导致注解Transactional失效

多数据源配置时&#xff0c;向事务管理器中注入数据源时可以直接注入DynamicRoutingDataSource而不要注入ItemDataSource类型&#xff0c;否则可能会出现事务失效问题。 其他事务失效问题参考&#xff1a; 注解Transaction踩坑指南 注解Transaction失效场景

Windows环境+C#实现显示接口测试

代码如下&#xff1a; using Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; …