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

通过分析这些需求发现,其实他们有一些共同的输入输出,只是规则各不相同,这时我的第一反应就是脚本化,把一些常用的基础功能做成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. 多线程基础(二)pthread的了解

    IOS中多线程的实现方案   了解NSOperation(代码) 所有的方法都是pthread开头的   然后再搞一条线程 pthread_create方法有返回值,作用:判断线程创建是否成功?   ...

  2. DP大作战—状态压缩dp

    题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...

  3. 透彻分析反射的基础_Class类

    一.反射的基石--->Class类 1. Java类用于描述一类事物的特性,该类事物有什么属性,没有什么属性,值域这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性值 ...

  4. android 进程/线程管理(三)----Thread,Looper / HandlerThread / IntentService

    Thread,Looper的组合是非常常见的组合方式. Looper可以是和线程绑定的,或者是main looper的一个引用. 下面看看具体app层的使用. 首先定义thread: package ...

  5. 代码校验工具 SublimeLinter 的安装与使用

    SublimeLinter 是 Sublime 的插件,它的作用是检查代码语法是否有错误,并提示.习惯了 IDE 下写代码的人一定需要一款在 Sublime 上类似的语法检查工具.下面我们开始. 安装 ...

  6. MySQL 强制操作以及order by 使用

    我们以MySQL中常用的hint来进行详细的解析,如果你是经常使用Oracle的朋友可能知道,Oracle的hincvt功能种类很多,对于优化sql语句提供了很多方法. 同样,在MySQL里,也有类似 ...

  7. 匿名内部类--毕向东java基础教程学习笔记

    1.匿名内部类其实就是内部类的简写形式. 2.定义匿名内部类的前提: 该内部类必须继承一个类,或者实现一个接口. 3.匿名内部类的格式:new 父类名或接口名(){定义子类内容:} 4.其实匿名内部类 ...

  8. ubuntu不能访问windows中的文件

    出现不能访问某个盘时(例如:OS) Error mounting /dev/sda5 at /media/user/OS: Command-line `mount -t "ntfs" ...

  9. JQ工具函数

    在jQuery中,工具函数是指直接依附于jQuery对象,针对jQuery对象本身定义的方法,即全局性的,我们统称为工具函数,或Utilites函数 主要作用于:字符串.数组.对象 API:工具函数 ...

  10. redis unwatch discard

    UNWATCH UNWATCH 取消 WATCH 命令对所有 key 的监视. 如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行UNWATC ...