最近在做新產品,這個產品需要滿足不同項目對於系統的定制性數據處理需求,比如有的要統計一段時間內某開關打開關閉了多少次,有的要統計一段時間內空調的使用率,有的希望根據溫度來控制空調的開還是關,有的則是希望根據教室內人員的多少來控制教室燈管的開關,或者根據季節來決定路燈的開關時間。總之規則很靈活,不同的項目有不同的需求,很難事先在系統中預先事先。
通過分析這些需求發現,其實他們有一些共同的輸入輸出,只是規則各不相同,這時我的第一反應就是腳本化,把一些常用的基礎功能做成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,今天到此結束。
后續繼續研究。
本系列包括: