開源地址: 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 車江毅