程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 【開源】.Net 動態腳本引擎NScript,.netnscript

【開源】.Net 動態腳本引擎NScript,.netnscript

編輯:C#入門知識

【開源】.Net 動態腳本引擎NScript,.netnscript


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved