当前位置: 首页 > news >正文

AScript - C#轻量级动态脚本引擎

一、简介

AScript 是一个基于 C# 的动态脚本解析、编译与执行引擎。它支持C# 语法,可以让应用程序在不重新编译的情况下动态执行用户自定义的脚本逻辑。

开源地址:https://gitee.com/rockey627/ascript

二、核心特性

语法支持

  • C# 基本语法:变量、运算符、表达式
  • 控制流:if/else、for、while、foreach、continue、break、return
  • 函数:支持自定义函数、函数重载、递归调用
  • 字符串内插:$'hello {name}'
  • 十六进制整数:0x0A
  • 行注释与块注释

执行模式

  • 解析执行:即时解析计算,对于循环语句性能较差
  • 编译执行:编译成委托再执行,可缓存编译结果再执行

多层级上下文

  • 支持创建子上下文
  • 子上下文可继承访问父上下文中的定义,实现逻辑复用
  • 适用于多支线脚本执行、函数调用隔离等场景
  • 顶级上下文:ScriptContext.Root,可全局设置变量、函数等

宿主集成

  • 注入变量、函数、类型
  • 自定义语法解析(关键字扩展)
  • 流式读取脚本

三、快速开始

 1 // NuGet: Install-Package AScript
 2 using AScript;
3 var script = new Script(); 4 var result = script.Eval("5+8*6"); // 53 5 6 // 定义函数 7 string code = @" 8 int sum(int a, int b)=>a+b; 9 int n=10; 10 sum(n,5)"; 11 var result = script.Eval(code); // 15

四、应用场景

1. 规则引擎

将业务规则以脚本形式存储,运行时动态加载执行,无需发版即可调整规则逻辑。

 1 string filePath = @"./rule.txt";
 2 // 缓存时间,-1表示永久缓存,0表示不缓存,大于0表示缓存时间(毫秒)
 3 int cacheTime = -1;
 4 // 文件路径作为缓存key
 5 string cacheKey = filePath;
 6 // 文件修改时间作为版本号(或者计算文件md5作为版本号)
 7 string cacheVersion = File.GetLastWriteTime(filePath).ToFileTimeUtc().ToString();
 8 // 如果文件未改动,则从缓存中执行,否则重新读取->解析->编译->缓存->执行
 9 var script = new Script();
10 script.Eval(() => File.OpenRead(filePath), cacheTime, cacheKey, cacheVersion);

2. 公式计算器

让用户自定义计算公式,系统负责解析执行,如财务模板、绩效计算等场景。

3. 游戏脚本系统

为游戏提供轻量级脚本支持,玩家可编写脚本实现自动任务、宏命令等功能。

4. 插件扩展机制

允许第三方编写脚本扩展程序功能,沙箱执行保障安全性。

5. 多支线执行

基于多层级上下文,支线间数据互不干扰,同时共享父级公共逻辑。

var rootContext = new ScriptContext();
rootContext.SetVar("n", 8);
rootContext.AddFunc<int, int, int>("sum", (a, b) => a + b);// 支线1
var context1 = new ScriptContext(rootContext);
context1.SetVar("x", 100);
var script1 = new Script(context1);
var result1 = script1.Eval("sum(x, n)");
Console.WriteLine(result1); // 108// 支线2
var context2 = new ScriptContext(rootContext);
context2.SetVar("y", 50);
var script2 = new Script(context2);
var result2 = script2.Eval("sum(y, n)");
Console.WriteLine(result2); // 58

五、结语

AScript 体积小巧、接口简洁,适合需要嵌入脚本能力的 .NET 应用。多层级上下文设计让它在多支线并行执行场景中也能游刃有余。如果您正在寻找一款轻量、高效、易集成的动态脚本引擎,不妨一试。

http://www.jsqmd.com/news/614677/

相关文章:

  • AI Weekly | 2026年4月第二周 · GitHub热门项目与AI发展趋势深度解析
  • 收藏!Agent开发高频面试题深度解析,小白也能轻松入门大模型应用
  • 【EF Core 10向量搜索架构设计终极指南】:20年微软数据平台架构师亲授生产级向量检索系统落地的5大避坑原则
  • django基于Spark的南昌房价数据分析系统的设计与实现_45i0b357_c018
  • (27)ArcGIS Pro 范围内汇总、汇总统计数据与交集制表:空间统计三工具全攻略
  • 谷歌Gemma 4 MoE实测
  • Agent Client Protocol 全景解析涛
  • Cursor vs Claude Code:2026 年 AI 编程工具巅峰对决
  • 25大数据 6-1 for循环
  • 经典知识点
  • 【Loom生产级落地红线】:3家头部金融系统血泪总结——4类不可逆崩溃场景预警
  • 城固县哪里买家电靠谱?优选城固金诺家电,性价比高,服务好! - 一个呆呆
  • 从零入门大模型:收藏这份AI智能体框架选型指南,小白也能轻松上手!
  • 一次会员积分系统改造复盘:从同步阻塞到异步解耦的演进与多级缓存一致性保障
  • PHP医疗数据脱敏配置标准落地手册(国家卫健委《医疗卫生信息系统安全规范》V3.2官方解读版)
  • 推荐一家专业做标签打印软件
  • Java与易语言:编程世界的两大差异
  • SQL Server 2008 R2 企业级安全审计方案(适配版)
  • 照片太多想批量提取名称?4招快速批量提取照片名字,小白也能秒会!
  • 次元画室赋能微信小程序:快速开发AI绘画社交应用
  • Matlab/Simulink仿真的PQ控制的跟网型储能系统,有控制环路,未考虑锁相环,dq阻抗扫频
  • AI小白必看:微调、RAG、Agent一次讲清,轻松入门大模型(收藏版)
  • 单片机作业4.8
  • django基于Python主流汽车价格分析可视化系统的设计与实现_nf85t54h_zl089
  • 初始Flask框架
  • AI Agent Harness Engineering 未来技术突破点:自主进化与跨域协作的研究方向
  • 仅限PHP 8.9.0+可用!3个未公开的SAPI层缓冲区参数,让500MB日志分析从32s压缩至1.8s
  • Java vs 汇编:高级与低级的终极对决
  • 2026年扶梯链条厂家最新推荐榜单:梯级链条、踏板链条、人行道链条、驱动链条、回转链条、压带链条厂家选择指南 - 海棠依旧大
  • Dify在Windows上的部署