最近在做新产品,这个产品需要满足不同项目对于系统的定制性数据处理需求,比如有的要统计一段时间内某开关打开关闭了多少次,有的要统计一段时间内空调的使用率,有的希望根据温度来控制空调的开还是关,有的则是希望根据教室内人员的多少来控制教室灯管的开关,或者根据季节来决定路灯的开关时间。总之规则很灵活,不同的项目有不同的需求,很难事先在系统中预先事先。

通过分析这些需求发现,其实他们有一些共同的输入输出,只是规则各不相同,这时我的第一反应就是脚本化,把一些常用的基础功能做成api,然后根据不同项目的需求编写不同的业务脚本,通过这些脚本调用api,再配合一定的逻辑来完成特定的需求。

一直以来我们都是基于windows做开发,使用c#相对较多,但是大家知道,c#是静态语言,编译后才可以使用,所以我首先想到的是是否可以对c#做动态编译,好像曾经听说过一些这方面的概念。于是就开始搜索相关文章,于是搜索到了一些相关的文章,比如:

#,如何用C#动态编译、执行代码,  http://www.cnblogs.com/jailu/archive/2007/07/22/827058.html

#,c#动态编译执行对象方法示例 运用映射机制创建对象, http://www.jb51.net/article/45768.htm

好的开始,说明确实存在这种可能性,只是用起来比较麻烦,所以我就想,肯定有人已经在此基础上做过包装了,在这个年代,任何有需求的地方,肯定已经有人开始行动了,所以就顺着搜索引擎的结果往下一页一页看,csscript出现在眼前,看名字像是我要的东西,于是点击去看看:http://www.csscript.net/

CS-Script is a CLR (Common Language Runtime) based scripting system which uses ECMA-compliant C# as a programming language. CS-Script currently targets Microsoft implementation of CLR (.NET 2.0/3.0/3.5/4.0/4.5) with full support on Mono.

CS-Script is an open-source (MIT) initiative that is distributed under the license agreement, which can be found here.

基本上来说,就是可以用c#来写脚本,可以充分发挥c#的威力,这对我们来说是好事,因为主程序和脚本语言都是用c#来写,学习成本下降了不少,其实这不管是从我们开发脚本系统的角度来考虑还是从使用者的角度来考虑,都降低了不少的成本。

对于我们开发来说,我们原来所写的各种接口对于csscript来说都是可见的,不需要像之前用lua做脚本,还得专门为他开发一套api。

从使用者角度来说,c#的类c的语法,其实没什么学习门槛,大家都至少本科毕业,c还是多少懂一点的,对于做用户服务的同事来说,压力陡然小了很多。

然后看License,MIT的,又放心了,公司这么抠门,如果要花钱买,估计会不太愿意吧。O(∩_∩)O哈哈~

打开看了一下,有两种方式可以使用csscript:

#,一种是通过官方提供的cscs.exe作为host,然后通过命令行的方式来运行自己的cs脚本,这不是我想要的,不过可以用来做测试;

#,一种是通过自己的host来运行脚本,让脚本成为自己的程序的一种扩充,成为一个插件,这个是我喜欢的,要实现这种方式,只需要在自己的程序中引用CSScriptLibrary.dll程序集即可。这个对我来说没什么问题。

下载了一个最新的压缩包,然后运行其中的示例,可以跑通,OK,今天到此结束。

后续继续研究。

本系列包括:

C#脚本引擎 CS-Script 之(一)——初识

C#脚本引擎 CS-Script 之(二)——性能评测

C#脚本引擎CS-Script之(三)——如何部署

C#脚本引擎 CS-Script 之(一)——初识的更多相关文章

  1. [19/04/19-星期五] Java的动态性_脚本(Script,脚本)引擎执行JavaScript代码

    一.概念 Java脚本引擎是jdk 6.0之后的新功能. 使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的. Java脚本API是连接Jav ...

  2. Shell脚本编程(一):初识shell script

    Shell简介 Shell是一个命令解释器,它是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核 ...

  3. C#脚本引擎 CS-Script 之(二)——性能评测

    以下以一个简单的HelloWord程序为例,来分析csscript脚本引擎的性能. class HelloWorld { public void SayHello() { Console.WriteL ...

  4. C#脚本引擎 CS-Script 之(三)——如何部署

    本文不但介绍了CS-Script如何部署,还介绍了CS-Script的部署后面的原理,并用一个框图详细介绍了部署中的各种细节. 一.获取资源 1.从官网上下载编译好的csscript资源:cs-scr ...

  5. Java 8 的 Nashorn 脚本引擎教程

    本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...

  6. 【开源】.Net 动态脚本引擎NScript

    开源地址: https://git.oschina.net/chejiangyi/NScript 开源QQ群: .net 开源基础服务  238543768 .Net 动态脚本引擎 NScript   ...

  7. 使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件Lua脚本引擎介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  8. Nmap源码分析(脚本引擎)

    Nmap提供了强大的脚本引擎(NSE),以支持通过Lua编程来扩展Nmap的功能.目前脚本库已经包含300多个常用的Lua脚本,辅助完成Nmap的主机发现.端口扫描.服务侦测.操作系统侦测四个基本功能 ...

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

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

随机推荐

  1. android 开发小记

    1.fragment & activity when config changes, activity will restart but fragment can be store. 2.te ...

  2. android5.x新特性之Tinting

    Android5.X对图形操作上有更多的功能.下面来看看Tinting(着色) Tinting的使用非常简单,几乎 没什么好说的,只要在xml中配置好tint和tintMode即可.直接看实际例子吧. ...

  3. TCP面向连接网络编程

    一 TCP&UDP协议 TCP,Tranfer Control Protocol,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对 ...

  4. Autocomplete:属性介绍、firefox中文支持问题

    如有问题,请前往 http://www.cnblogs.com/dreamowneryong/p/4953911.html 原文评论交流 一,属性介绍 * minChars (Number) 在触发a ...

  5. C#调用C++ DLL 文件

    说来惭愧,都注册一年多了,却没有发表过一篇正式的博文,中间很多学习的过程也没有记录下来.如今到了一个新的环境,也有了学习的机会,一定要把每天的收获记录一下. 要做的东西需要引用C++编写的DLL,刚开 ...

  6. hibernate基本类型映射

    model包: Book.java: package model; import java.sql.Blob;import java.util.Date; public class Book {   ...

  7. hdu 2874 Connections between cities [LCA] (lca->rmq)

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  8. docker常用术语命令

    镜像(Image) vs Dockerfile 这组概念很少会让人产生疑惑,但是这两者的区别非常重要.Docker在镜像(image)中运行你的代码,而不是Dockerfile.Dockerfile是 ...

  9. C中不安全函数

    C 中大多数缓冲区溢出问题可以直接追溯到标准 C 库.最有害的罪魁祸首是不进行自变量检查的.有问题的字符串操作(strcpy.strcat.sprintf 和 gets).一般来讲,象“避免使用 st ...

  10. Android+Sqlite 实现古诗阅读应用(一)

    不说网络app,很多本地的app都有一些随机的内容推送,比如随机推送一些小知识,古诗,名言名画什么的,界面制作的好看一点就能看起来特别的文艺范, 最近就是看了这样的一些应用,就想自己实现一下,这种方法 ...