C# Microsoft.ClearScript.V8脚本使用

2023-05-16

 1、ClearScript支持的功能和适用场景

微软的.net是非常强大和灵活的,除了C#体系脚本扩展,也支持其他流行的脚本扩展,Microsoft.ClearScript.V8就是一个.NET绑定到Google V8的脚本引擎。它允许.NET应用程序直接从JavaScript代码中调用函数,并返回JavaScript类型。ClearScript.V8可以使用各种JavaScript库(比如jQuery)来提高工作效率,也可以使用它来测试JavaScript代码。

一些常见的用途包括:

1. 调用在JavaScript中编写的函数或库以实现特定的业务逻辑。

2. 将JavaScript UI(如Web页面)嵌入到.NET应用程序中。

3. 为.NET程序提供脚本语言接口。

4. 为.NET程序提供动态加载库的能力。

总之,Microsoft.ClearScript.V8可以使.NET应用程序更具有灵活性和可扩展性,使其能够更好地与JavaScript代码进行交互。

2、如何使用ClearScript

        在C#工程中,通过nuget添加和管理ClearScript包。

         必须添加的是Microsoft.ClearScript.V8,另外每个系统平台需要对应的Native包。Win平台有Microsoft.ClearScript.V8.Native.win-x64和Microsoft.ClearScript.V8.Native.win-x86,根据实际部署环境选择性添加。

 

3、简单的数据交互示例

         为测试数据交互,我们可以写一个简单的类来验证。

public class PascalData
{
    public int iVal01 { get; set; }
    public int iVal02 { get; set; }
    public float fVal01 { get; set; }
    public float fVal02 { get; set; }
}

     定义V8引擎并使用。

using Microsoft.ClearScript.V8;

//定义数据类
PascalData pascalData = new PascalData();

//创建V8引擎
var engine = new V8ScriptEngine();

//添加pascalData到脚本中,对象名字myPascal
engine.AddHostObject("myPascal", pascalData);

//通过脚本动态定义函数,函数中使用C#定义的myPascal对象
engine.Evaluate("function iVal02(){ var k = myPascal.iVal01 * 3; return k;};");
engine.Evaluate("function fVal02(){  var f = myPascal.fVal01 / Math.PI; return f;};");

pascalData.iVal01 = 1;
pascalData.fVal01 = 10.0f;

//调用脚本中定义的函数
pascalData.iVal02 = (int)engine.Script.iVal02();
pascalData.fVal02 = (float)engine.Script.fVal02();
Console.WriteLine($"{pascalData.iVal01},{pascalData.iVal02},{pascalData.fVal01},{pascalData.fVal02}");

pascalData.iVal01 = 123;
pascalData.fVal01 = 8440.8f;

pascalData.iVal02 = (int)engine.Script.iVal02();
pascalData.fVal02 = (float)engine.Script.fVal02();
Console.WriteLine($"{pascalData.iVal01},{pascalData.iVal02},{pascalData.fVal01},{pascalData.fVal02}");

运行效果如下:

4、如何获取脚本中定义的对象

         在上面的例子中,我们通过脚本定义了iVal01和iVal02两个函数,然后使用engine.Script.iVal01()和engine.Script.iVal02()想普通方法一样执行。但如果脚本中没有定义相应的函数,执行会报错,怎么判断脚本中是否定义了相应的变量呢?V8引擎提供的方法,可以获取脚本中定义的对象,参考如下:

var memberNames = engine.Script.PropertyNames;
bool hasiVal01 = false;
bool hasiVal02 = false;
foreach (var mb in memberNames)
{
    if (mb.Equals("iVal01"))
         hasiVal01 = true;
    else if (mb.Equals("iVal02"))
         hasiVal02 = true;
}
if (hasiVal01)
    pascalData.iVal02 = (int)engine.Script.iVal02();
if (hasiVal02)
    pascalData.fVal02 = (float)engine.Script.fVal02();

5、使用其他C#和自定义的库

        C#的系统库和自己编写的库,也可以带入脚本中使用

//C#库的DLL名称,不是命名空间名称和类名。DLL可以是系统的和自己定义的
string[] mylib= {
    "mscorlib", "System.Core"
};

engine.AddHostObject("lib", new HostTypeCollection(mylib));
engine.AddHostType("Console", typeof(Console));

engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");

6、其他

V8引擎github地址:GitHub - microsoft/ClearScript: A library for adding scripting to .NET applications. Supports V8 (Windows, Linux, macOS) and JScript/VBScript (Windows).

C#的脚本参考之前的博文:C# Roslyn编写脚本数据交互示例_PascalMing的博客-CSDN博客

V8引擎使用例子:https://www.cnblogs.com/BH-RJ-WK/p/15984253.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# Microsoft.ClearScript.V8脚本使用 的相关文章

随机推荐

  • 解决error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file

    一 问题 运行hello程序时 xff0c 用到了自己编写的动态库 在目录 usr local lib目录下 xff0c 运行时出现 error while loading shared libraries libhello so 1 ca
  • 解决warning: incompatible implicit declaration of built-in function 'malloc'

    由于代码中使用了malloc函数和字符串函数 xff0c 编译时出现错误 warning incompatible implicit declaration of built in function malloc warning incom
  • 解决虚拟机安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题

    在Intel i5 4460的主机上安装Ubuntu 14 04 xff08 64位 xff09 xff0c 虚拟机使用的是Vmware 10 0 0 build 1295980 在新建好虚拟机 xff0c 运行时候就出现了VMware W
  • 【CentOS7】yum安装时出现错误Errno 14 Couldn't resolve host的解决办法

    在安装python sphinx时出现Errno 14 Couldn 39 t resolve host xff0c 什么东东 xff1f root 64 localhost jansson 1 2 yum install python s
  • SAS (Serial Attached SCSI) 技术详解

    xff08 一 xff09 什么是SAS SAS xff08 Serial Attached SCSI xff09 即串行SCSI技术 xff0c 是一种磁盘连接技术 xff0c 它综合了并行SCSI和串行连接技术 xff08 如FC SS
  • mdadm命令解析

    mdadm命令解析 一 在linux系统中目前以MD Multiple Devices 虚拟块设备的方式实现软件RAID 利用多个底层的块设备虚拟出一个新的虚拟设备 并且利用条带化 stripping 技术将数据块均匀分布到多个磁盘上来提高
  • fio使用指南

    这个文档是对fio 2 0 9 HOWTO文档的翻译 xff0c fio的参数太多了 xff0c 翻译这个文档时并没有测试每一个参数的功能和使用方法 xff0c 只有少量参数做了试验 xff0c 大部分的参数采用的是根据字面翻译或是个人理解
  • CentOS系统安装VNC详细步骤

    下面是总结的详细配置步骤 xff0c 分享给大家 一 VNC 远程控制 CentOS 系统 1 查看 CentOS 系统中是否有安装 vnc xff08 默认安装 xff09 输入命令 xff1a rpm q vnc vnc server
  • 怎么看电脑CPU是几核?

    对硬件的东西知之甚少 xff0c 保存在此 xff0c 以便以后查阅 方法一 鼠标右键桌面最下方的任务栏 任务管理器 性能 查看cpu使用记录 xff0c 有几个窗口就是几核心cpu xff1b 方法二 右键 我的电脑 属性 硬件 设备管理
  • linux批量远程控制

    前提 xff1a 勉ssh秘钥登陆 使用pdssh 1 配置主机列表 web list root 64 192 168 1 2 22 root 64 192 168 1 3 182 22 root 64 192 168 1 4 181 22
  • DataBinding详解

    一 开启DataBinding 在build gradle文件添加 android dataBinding enabled true 二 生成DataBinding布局 1 光标在布局文件的根布局 gt 点击Alt 43 Enter gt
  • python批量删除txt文件中指定行

    应用场景 xff1a 在深度学习项目中 xff0c 常常会处理各种数据集 比如已经标注好的数据标签有三类 xff1a 人形 汽车 猫 xff0c 有一个新项目 xff0c 只需要识别人形 xff0c 那就需要把这个数据集进行处理 xff0c
  • Python.循环

    一 循环结构 xff1a 是程序控制流程的三大结构之一 xff08 三大手段 方法之一 xff09 通过指定的条件将循环体进行有限次或无限次 xff08 死循环 xff09 地重复运行 在Python中主要用到while和for函数实现 二
  • bind详细学习

    DNS DNS xff1a Domain Name Service 应用层协议 xff08 C S 53 udp 53 tcp xff09 域名 分类 xff1a 最多可以有127级域名 根域一级域名 xff1a Top Level Dom
  • C++ 指针常量、常量指针和常指针常量

    1 指针常量 如果在定义指针变量时候 xff0c 指针变量前用const修饰 xff0c 被定义的指针变量就变成了一个指针类型的常变量 xff0c 指针类型的常变量简称为指针常量 格式如下 数据类型 const 指针变量 61 变量名 xf
  • Jetpack初尝试 NavController,LiveData,DataBing,ViewModel,Paging

    文章目录 插件配置NavController 使用1 创建xml2 创建Activity3 res 创建navigation nav garden和说明流程 ViewModel 负责页面的数据LiveData onChangedObserv
  • 移动固态硬盘删除分区(包括EFI分区)

    新换电脑原始的固态硬盘大小是500G xff0c 担心不够用 xff0c 但电脑只有一个放置固态硬盘的位置 xff0c 所以打算将原装的500G固态换成1T固态 xff0c 原始500G固态改成移动固态硬盘 原始500G固态一共有4个分区
  • Linux-OneNote的安装和使用

    P3X OneNote是Linux的非官方应用程序 xff0c 允许用户直接从Linux平台创建和共享笔记 安装 第一种方法 xff1a Snap安装 此部分转载自链接 在Linux操作系统上使用非官方版OneNote最快捷 最简单的方法是
  • Visual Studio运行控制台程序一闪而退的解决方法!

    初学者在使用Visual Studio各个版本时 xff0c 在进行调试运行时 xff0c 会发现控制台总是一闪即退 xff0c 输出结果的窗口无法保持打开状态 xff01 其实问题是你执行时按的是F5还是Ctrl 43 F5 xff0c
  • C# Microsoft.ClearScript.V8脚本使用

    1 ClearScript支持的功能和适用场景 微软的 net是非常强大和灵活的 xff0c 除了C 体系脚本扩展 xff0c 也支持其他流行的脚本扩展 xff0c Microsoft ClearScript V8就是一个 NET绑定到Go