C#脚本引擎 CS-Script 之(一)——初识
最近在做新产品,这个产品需要满足不同项目对于系统的定制性数据处理需求,比如有的要统计一段时间内某开关打开关闭了多少次,有的要统计一段时间内空调的使用率,有的希望根据温度来控制空调的开还是关,有的则是希望根据教室内人员的多少来控制教室灯管的开关,或者根据季节来决定路灯的开关时间。总之规则很灵活,不同的项目有不同的需求,很难事先在系统中预先事先。
通过分析这些需求发现,其实他们有一些共同的输入输出,只是规则各不相同,这时我的第一反应就是脚本化,把一些常用的基础功能做成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 之(一)——初识的更多相关文章
- [19/04/19-星期五] Java的动态性_脚本(Script,脚本)引擎执行JavaScript代码
一.概念 Java脚本引擎是jdk 6.0之后的新功能. 使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的. Java脚本API是连接Jav ...
- Shell脚本编程(一):初识shell script
Shell简介 Shell是一个命令解释器,它是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核 ...
- C#脚本引擎 CS-Script 之(二)——性能评测
以下以一个简单的HelloWord程序为例,来分析csscript脚本引擎的性能. class HelloWorld { public void SayHello() { Console.WriteL ...
- C#脚本引擎 CS-Script 之(三)——如何部署
本文不但介绍了CS-Script如何部署,还介绍了CS-Script的部署后面的原理,并用一个框图详细介绍了部署中的各种细节. 一.获取资源 1.从官网上下载编译好的csscript资源:cs-scr ...
- Java 8 的 Nashorn 脚本引擎教程
本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...
- 【开源】.Net 动态脚本引擎NScript
开源地址: https://git.oschina.net/chejiangyi/NScript 开源QQ群: .net 开源基础服务 238543768 .Net 动态脚本引擎 NScript ...
- 使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件Lua脚本引擎介绍
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- Nmap源码分析(脚本引擎)
Nmap提供了强大的脚本引擎(NSE),以支持通过Lua编程来扩展Nmap的功能.目前脚本库已经包含300多个常用的Lua脚本,辅助完成Nmap的主机发现.端口扫描.服务侦测.操作系统侦测四个基本功能 ...
- 利用Roslyn构建一个简单的C#交互脚本引擎
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 微软的下一代编译器技术Roslyn是一个里程碑的技术,可以给.NET平台带来无限想象空间.比 ...
随机推荐
- 【SVN】Unable to connect to a repository at URL 'svn://localhost/Test'
早上配置SVN,但是这次不是那么顺利... 环境: Windows 7 SVN服务器端:CollabNetSubversion-server-1.8.13-1 SVN客户端:TortoiseSVN_V ...
- Effective Java 53 Prefer interfaces to reflection
Disadvantage of reflection You lose all the benefits of compile-time type checking, including except ...
- 常用vi编辑命令
在自己的博客里存起来,这么多全记住确实有点难,时不时的翻一翻到是可以的. 摘自:http://www.cnblogs.com/junw_china/articles/1708967.html 光标控制 ...
- 如何使用emacs编写c语言程序,并编译运行
vi和emacs被分别被称为编辑器之神和神之编辑器.vi的入门精通都很难,emacs入门容易,精通难:vi使用起来不停地切换模式,而emacs则不停地ctrl,meta等组合键.因此,高德纳大师说操作 ...
- Culcurse
一.简介 如果你是一个享受Linux终端的系统管理员,但同样需要一种方法来安排每天最重要的任务.约会和会议,你会发现calcurse是一个很有用的工具.calcurse包含了日历.一个待办事项管理.一 ...
- Linux搭建DNS服务器
Linux系统信息: Version: Centos 6.6 Ip address:10.0.0.104 Hostname: extmail.com 配置系统 hostname Vim /etc/sy ...
- Flume practices and sqoop hive 2 oracle
#receive the file flume-ng agent --conf conf --conf-file conf1.conf --name a1 flume-ng agent --conf ...
- ZOJ 3829 Known Notation --贪心+找规律
题意:给出一个字符串,有两种操作: 1.插入一个数字 2.交换两个字符 问最少多少步可以把该字符串变为一个后缀表达式(操作符只有*). 解法:仔细观察,发现如果数字够的话根本不用插入,数字够的最 ...
- Android代码优化----Application节点的模板写法及UI工具类
一. MyApplication类的编写: 新建一个类MyApplication,继承自Application.代码如下: MyApplication.java: package com.smyhva ...
- 解决svn的working copy locked并且cleanup恢复不能的情况
产生这种情况大多是因为上次svn命令执行失败且被锁定了. 如果cleanup没有效果的话只好手动删除锁定文件. cd 到svn项目目录下,然后执行如下命令 del lock /q/s 就把锁删掉了.