開源地址: https://git.oschina.net/chejiangyi/NScript
java
開源QQ羣: .net 開源基礎服務 238543768git
.Net 動態腳本引擎 NScriptwindows
用於解決.net環境windows系統下相似java中Grovvy的功能和方向。
在互聯網項目能夠用來作一些功能,如動態營銷活動(營銷業務解耦和剝離),規則引擎,流程引擎,windows運維腳本,源碼式插件開發等。
使用方式運維
包括exe Main方式,程序集方式,應用程序域三種方式。編輯器
最終編譯文件函數
BSF.BaseService.NScript.exe工具
exe 說明
1) 能夠用cmd命令運行本exe
/run 命令格式:/run {filename} {args} this
說明:必須實現Main入口函數. {filename} 爲文件路徑,{args}爲Main入口參數,默認空格分隔。
/help 命令格式:/help 編碼
說明:用戶查看當前exe支持的命令說明。
2)exe自己就是腳本編輯器。
能夠用做.net 腳本的編輯工具,在實際運行環境中直接編輯或臨時修改代碼,開發環境中建議仍是使用vs。
3)exe自己也是腳本運行時。
整個腳本解析和運行時。
4) exe大小
exe 自己很小很小,由於打包合併了第三方編輯器控件,才變動大些。spa
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 車江毅