C# Microsoft.ClearScript.V8脚本使用

这篇具有很好参考价值的文章主要介绍了C# Microsoft.ClearScript.V8脚本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 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,根据实际部署环境选择性添加。

C# Microsoft.ClearScript.V8脚本使用

 

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}");

运行效果如下:

C# Microsoft.ClearScript.V8脚本使用

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文章来源地址https://www.toymoban.com/news/detail-476349.html

到了这里,关于C# Microsoft.ClearScript.V8脚本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包