推荐一个强大C#脚本引擎,方便我们在项目中,动态执行C#脚本。

01 项目简介

CS-Script是非常成熟的C#脚本引擎,自2004年起就发布了,即.NET发布后的两年。

支持托管和独立(CLI)执行模型,可以作为PowerShell的纯C#替代品,也可以通过托管脚本引擎在运行时扩展.NET应用程序。

允许在不影响代码库的情况下无缝切换底层编译技术,目前支持的编译器有dotnet.exe和csc.exe。

02 开发工具支持与平台兼容

与Visual Studio、VSCode、Sublime Text 3等开发工具有良好的集成,可以在Windows和Linux上运行,类库针对".NET Standard"进行编译,因此可以被任何托管应用程序托管。

03 使用方法

1、安装依赖库

Install-Package CS-Script

2、有返回值的的动态脚本

using CSScriptLib; 

// 使用CS-Script的Evaluator静态类加载一个动态方法
// 这个方法接受一个字符串形式的C#代码,并编译执行它
dynamic script = CSScript.Evaluator
.LoadMethod(@"int Product(int a, int b)
{
return a * b; // 计算两个数的乘积
}"); // 调用加载的方法,并传入两个参数3和2
int result = script.Product(3, 2); // 输出结果到控制台
Console.WriteLine(result); // 输出:6

3、无返回值的动态脚本

using CSScriptLib;

// 使用CS-Script的Evaluator静态类创建一个委托(Delegate)
// 这个委托指向一个接受一个字符串参数的方法,该方法将字符串输出到控制台
var log = CSScript.Evaluator
.CreateDelegate(@"void Log(string message)
{
Console.WriteLine(message); // 使用Console.WriteLine将传入的消息输出到控制台
}"); // 调用创建的委托,并传入字符串"Test message"
log("Test message"); // 执行Log方法,输出"Test message"到控制台

4、简单表达式脚本

using CSScriptLib; 

// 使用CS-Script的Evaluator静态类的Eval方法直接评估一个C#表达式
// 这里评估的表达式是"6 + 3",即计算6和3的和
int sum = CSScript.Evaluator.Eval("6 + 3"); // 输出计算结果到控制台
Console.WriteLine(sum); // 打印计算结果,即9

5、实现了特定接口的C#脚本

using CSScriptLib; 

// 使用CS-Script的Evaluator静态类的LoadCode方法加载一个实现了ICalc接口的C#脚本
// 这个脚本定义了一个名为Script的类,它实现了ICalc接口中的Sum方法
ICalc calc = CSScript.Evaluator
.LoadCode<ICalc>(@"using System;
public class Script: ICalc // 继承ICalc接口
{
public int Sum(int a, int b) // 实现Sum方法
{
return a + b; // 返回两个整数的和
}
}"); // 调用加载的脚本中的Sum方法,并传入参数1和2
int result = calc.Sum(1, 2); // 输出结果到控制台
Console.WriteLine(result); // 打印Sum方法的执行结果,即3

04 项目地址

https://github.com/oleg-shilo/cs-script

更多开源项目: https://github.com/bianchenglequ/NetCodeTop

- End -

推荐阅读

2个零基础入门框架教程!

一款可以替代Navicat的数据库管理工具

CSCore:一个.Net功能强大且灵活的开源音频处理库

Blazor开源UI简洁组件:10个热门.Net开源项目推荐!

ExcelDataReader:一个.Net高性能Excel开源读取器

cs-script:一个非常成熟的C#脚本开源引擎的更多相关文章

  1. 利用Roslyn构建一个简单的C#交互脚本引擎

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 微软的下一代编译器技术Roslyn是一个里程碑的技术,可以给.NET平台带来无限想象空间.比 ...

  2. MSSQL-Scripter,一个新的生成T-SQL脚本的SQL Server命令行工具

    这里向大家介绍一个新的生成T-SQL脚本的SQL Server命令行工具:mssql-scripter.它支持在SQL Server.Azure SQL DB以及Azure SQL DW中为数据库生成 ...

  3. 分享一个php的启动关闭脚本(原)

    自己简单写的一个php服务的启动脚本和大家分享 思路(实现的原理): 1:function模块+case语句多分支判断 2:通过添加# chkconfig: 2345 43 89注释实现开机自启动(前 ...

  4. 使用Notepad++开发C#,一个复杂点的csscript脚本

    使用Notepad++开发C#,一个复杂点的csscript脚本: //css_dir ..\..\lib; //css_ref Geb.Image.dll; //css_ref Geb.Image. ...

  5. 一个很不错的bash脚本编写教程

    转自 http://blog.chinaunix.net/uid-20328094-id-95121.html 一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂! 建立一个脚本 Lin ...

  6. Script:SQL调优健康检查脚本

    Script:SQL调优健康检查脚本 http://www.askmaclean.com/archives/sql-tuning-health-check-script.html 以下脚本可以用于收集 ...

  7. 如何实现shell并发 一个入门级可控多线程shell脚本方案

     如何实现shell并发      很多人都问我如何写shell脚本,如何实现同时给三台ftp服务器上传文件,如何同时检测三台服务器是否alive等,其实这就是想实现shell的并发.那么shell并 ...

  8. Shell:如何写一个多选菜单的脚本

    Blog:博客园 个人 翻译自How to Create a Multiple Choice Menu in Bash Scripts 目录 多选菜单脚本介绍 配置输入提示 创建预定选项列表 创建预选 ...

  9. Roslyn(CSharpScript).Net脚本编译引擎使用过程内存增涨与稳定的方式

    目       录 1.      引用程序集... 1 2.      内存增涨的情况... 2 3.      内存稳定的情况... 4 1.   引用程序集 Roslyn 是微软公司开源的 .N ...

  10. 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新

    大家好,  我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain  用于 热更新 . 简单的说, 原理就是 类似 Asp.net 那样 让 当前 WebApp 运行在一个 A ...

随机推荐

  1. 关于使用plsql操作oracle的一点小技巧和几个常用的查询语句

    plsql是什么: 就是这个,专门操作oracle的一个工具,好用还免费. 创建一个测试表: create table Student( Id number not null, Name varcha ...

  2. JavaScript 语句后可以省略分号么?

    摘自知乎:https://www.zhihu.com/question/20298345 田乐:加与不加是风格问题,风格争议不需要有个定论.关键的问题在于如何"争论",处理好冲突, ...

  3. TRLO: An Efficient LiDAR Odometry with 3D Dynamic Object Tracking and Removal

    arxiv | 中科院联合国科大开源 TRLO:一种结合3D动态物体跟踪与移除的高效LiDAR里程计 [TRLO: An Efficient LiDAR Odometry with 3D Dynami ...

  4. SQL 清除数据库中所有表的数据

    进行数据库的操作,有时候我们需要清除数据库中所有的数据,如果你不嫌麻烦,可以一次一次的执行truncate操作,但是如果遇到有无数个表的情况,这种操作无疑是很耗时的 我曾经百度别人的代码,看都没看就直 ...

  5. php如何快速入门

    PHP交流群  656679284  为PHP广大爱好者提供技术交流,有问必答,相互学习相互进步! 学习教程 学习前期,首要的WEB前端基础知识,比如html5/css3/java/jquery有个简 ...

  6. ChatGPT:编程的 “蜜糖” 还是 “砒霜”?告别依赖,拥抱自主编程的秘籍在此!

    在当今编程界,ChatGPT 就像一颗耀眼却又颇具争议的新星,它对编程有着不可忽视的影响.但这影响就像一把双刃剑,使用不当,就可能让我们在编程之路上"受伤". 一.过度依赖 Cha ...

  7. 『玩转Streamlit』--交互类组件

    交互类组件在Web应用程序中至关重要,它们允许用户与应用进行实时互动,能够显著提升用户体验. 用户不再只是被动地接收信息,而是可以主动地输入数据.做出选择或触发事件,从而更加深入地参与到应用中来. 此 ...

  8. gal game 杂谈——《GINKA》

    gal game 杂谈--<GINKA> 剧情梳理 Ps:女主分为小学阶段和高中阶段,这里称小学阶段为小时候的女主,高中阶段为大女主,分离出来爱的为GINKA(长相是小时候的女主). 1. ...

  9. 批量归一化(BN, Batch Normalization)

    现在的神经网络通常都特别深,在输出层向输入层传播导数的过程中,梯度很容易被激活函数或是权重以指数级的规模缩小或放大,从而产生"梯度消失"或"梯度爆炸"的现象,造 ...

  10. Collections Framework中的算法(之二)

    从本篇开始我们讲述Collections中的一些算法的源代码!本篇主要讲述与排序相关的一些方法,如:排序.反序.反序比较器.乱序.最大值和最小值等. 一.头及一些与算法相关的属性 package ja ...