【开源】.Net 动态脚本引擎NScript
开源地址: https://git.oschina.net/chejiangyi/NScript
开源QQ群: .net 开源基础服务 238543768
.Net 动态脚本引擎 NScript
用于解决.net环境windows系统下类似java中Grovvy的功能和方向。
在互联网项目可以用来做一些功能,如动态营销活动(营销业务解耦和剥离),规则引擎,流程引擎,windows运维脚本,源码式插件开发等。
使用方式
包括exe Main方式,程序集方式,应用程序域三种方式。
最终编译文件
BSF.BaseService.NScript.exe
exe 说明
1) 可以用cmd命令运行本exe
/run 命令格式:/run {filename} {args}
说明:必须实现Main入口函数. {filename} 为文件路径,{args}为Main入口参数,默认空格分隔。
/help 命令格式:/help
说明:用户查看当前exe支持的命令说明。
2)exe本身就是脚本编辑器。
可以用作.net 脚本的编辑工具,在实际运行环境中直接编辑或临时修改代码,开发环境中建议还是使用vs。
3)exe本身也是脚本运行时。
整个脚本解析和运行时。
4) exe大小
exe 本身很小很小,因为打包合并了第三方编辑器控件,才变更大些。
5)exe可以被解决方案以dll方式引用,并使用NScriptHelper接口方法。
Main方式示例
说明:
以exe命令的方式运行脚本示例
1) 点击“运行”.bat
2) 点击 "bsf.baseservice.nscript.exe" 进行脚本编辑及调试。
截图:

压缩包下载:http://share.weiyun.com/043fe46f11aabc1c2c17eb4d7cfa1e00
程序集或应用程序域方式运行示例
说明
1) 解决方案引用"BSF.BaseService.NScript.exe"
2) 程序集方式及应用程序域方式使用代码demo。
{
this.richTextBox1.Text = @" public class B
{
//static void Main(string[] args)
//{
// System.Console.WriteLine(""hello"");
// System.Console.ReadLine();
// System.Console.ReadKey();
//}
public string test(string a)
{
return a;
}
}";
}
//程序集方式
private void button1_Click(object sender, EventArgs e)
{
try
{
string code = this.richTextBox1.Text;
CompilerResult result = null;
var r = NScriptHelper.Run(new CompilerParams()
{
EnumSourceType = Core.EnumSourceType.Code,
EnumCompilerMode = Core.EnumCompilerMode.Assembly,
CodeOrFileName = code
},
"B", "test", new object[] { "a" }, out result);
MessageBox.Show(r);
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
//应用程序域方式
private void button2_Click(object sender, EventArgs e)
{
try
{
string code = this.richTextBox1.Text;
CompilerResult result = null;
var r = NScriptHelper.Run(new CompilerParams()
{
EnumSourceType = Core.EnumSourceType.Code,
EnumCompilerMode = Core.EnumCompilerMode.AppDomian,
CodeOrFileName = code
},
"B", "test", new object[] { "a" }, out result);
MessageBox.Show(r);
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
压缩包下载:http://share.weiyun.com/5b1f0adf5526b01c7f8ace09eaf9d113
使用exe编辑脚本示例

代码main.cs文件编写示例
/*
* codefiles=a.cs,codes\b.cs;//其他编译代码文件 ,分割多个文件 (支持相对路径) , 大小写敏感 (不要有分号和等号)
* dllfiles=System.dll;//引用的dll,即编译需要的dll ,分割多个dll (支持相对路径) ,大小写敏感 (不要有分号和等号)
* compilerlanguage=csharp;//编译语言类型,默认C#,可以不写
*/
/*
* 以上为主文件的编译头信息,必须要写置顶在代码文件头部。 包含源码文件信息,dll相关引用信息,代码编写语言;
头信息中不要非常规的去使用;和=号,这个是用来解析的分隔符。主文件建议使用.main.cs命名结尾,这样可以自动识别,其他代码文件为cs结尾。
* 以下为代码编码内容,语法遵循.net本身的语法及书写规范
* by 车江毅
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace mytest //可以不要命名空间也可
{
public class B
{
//程序集或者应用程序域方式运行
//关于调试: 通过“编辑器”->“调试” 暂不支持传入参数调试,但是实际环境是可以传入参数的
public string test()
{
return new C().test();
}
//Main编译方式需要指定的Main入口函数
//关于调试: 通过“编辑器”->“调试” 暂不支持传入参数调试,但是实际环境是可以传入参数的
static void Main(string[] args)
{
System.Console.Read();
}
}
}
by 车江毅
【开源】.Net 动态脚本引擎NScript的更多相关文章
- 复杂多变场景下的Groovy脚本引擎实战
一.前言 因为之前在项目中使用了Groovy对业务能力进行一些扩展,效果比较好,所以简单记录分享一下,这里你可以了解: 为什么选用Groovy作为脚本引擎 了解Groovy的基本原理和Java如何集成 ...
- c# 动态执行脚本,相关的几个脚本引擎.
Jint 嵌入式的javascript脚本支持引擎,一直都在更新,对各种方法支持也比较好,可以 C# 交互. https://github.com/sebastienros/jint Jurass ...
- JDK8在Java转让Javascript脚本引擎动态地定义和运行代码
import java.lang.*; import java.util.Arrays; import java.util.List; import javax.script.Invocable; i ...
- C#动态编译引擎-CS-Script
什么是CS-Script? CS-Script是一种以CLR(公共语言运行库)为基础的脚本系统,它使用ECMA标准的C#作为编程语言,它面向微软的CLR运行库(.net 2.0/3.0/3.5/4.0 ...
- 使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件Lua脚本引擎介绍
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- C#脚本引擎 CS-Script 之(三)——如何部署
本文不但介绍了CS-Script如何部署,还介绍了CS-Script的部署后面的原理,并用一个框图详细介绍了部署中的各种细节. 一.获取资源 1.从官网上下载编译好的csscript资源:cs-scr ...
- Java 8 的 Nashorn 脚本引擎教程
本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...
- 利用Roslyn构建一个简单的C#交互脚本引擎
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 微软的下一代编译器技术Roslyn是一个里程碑的技术,可以给.NET平台带来无限想象空间.比 ...
- C#脚本引擎 CS-Script 之(二)——性能评测
以下以一个简单的HelloWord程序为例,来分析csscript脚本引擎的性能. class HelloWorld { public void SayHello() { Console.WriteL ...
随机推荐
- opencv源码:cascadedetect
级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- Linux CentOS 配置Tomcat环境
一.下载Tomcat 下载Tomcat方式也有两种,可以参考我的前一篇博文Linux CentOS配置JDK环境,这边就不再赘述. 二.在Linux处理Tomcat包 1.创建tomcat文件夹 mk ...
- [APUE]文件和目录(下)
一.mkdir和rmdir函数 #include <sys/types.h> #include <sys/stat.h> int mkdir(const char *pathn ...
- [APUE]文件和目录(上)
一.文件权限 1. 各种ID 我在读这一章时遇到了各种ID,根据名字完全不清楚什么意思,幸好看到了这篇文章,http://blog.csdn.net/ccjjnn19890720/article/de ...
- 旺财速啃H5框架之Bootstrap(一)
接下来的时间里,我将和大家一起对当前非常流行的前端框架Bootstrap进行速度的学习,以案例的形式.对刚开始想学习Bootstrap的同学而找不着边的就很有帮助了.如果你想详细的学习Bootstra ...
- 谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- nginx服务器安装及配置文件详解
nginx在工作中已经有好几个环境在使用了,每次都是重新去网上扒博客,各种编译配置,今天自己也整理一份安装文档和nginx.conf配置选项的说明,留作以后参考.像负载均衡配置(包括健康检查).缓存( ...
- 和我一起看API(一)你所不知道的LinearLayout补充
楼主英语水平差,翻译的不好的话请多多指正,嘿嘿... A Layout that arranges its children in a single column or a single row. T ...