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

来源:http://www.cnblogs.com/chejiangyi/archive/2016/06/27/5620879.html
-Advertisement-
Play Games

.net 動態腳本引擎, 用於解決.net環境windows系統下類似java中Grovvy的功能和方向。 在互聯網項目可以用來做一些功能,如動態營銷活動(營銷業務解耦和剝離),規則引擎,流程引擎,windows運維腳本,源碼式插件開發。 ...


開源地址: https://git.oschina.net/chejiangyi/NScript

開源QQ群: .net 開源基礎服務  238543768

 

.Net 動態腳本引擎 NScript

  用於解決.net環境windows系統下類似javaGrovvy的功能和方向。
在互聯網項目可以用來做一些功能,如動態營銷活動(營銷業務解耦和剝離),規則引擎,流程引擎,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 車江毅


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 安裝VMware Workstation 12 ubuntu15.10安裝VMware Workstation12的步驟如下: 1.在 https://download3.vmware.com/software/wkst/file/VMware-Workstation-Full-12.1.0-327 ...
  • When using chmod -R o+rx /data , you set the execute permission on all directories as well as files in the /data directory. To set the execute permiss... ...
  • 我在學習mvc4框架的時候,因為是筆記本,覺得裝了一個vs就很大了,再裝一個sql server 就更麻煩,因此,就想到使用vs自帶的localDB,直接生成預覽的時候是沒有問題的,但是當把mvc4的項目發佈,然後部署到iis上之後,localDB就連接不上了,百度了很久,找到瞭解決方案,特此記錄: ...
  • Nop中定義了ICacheManger介面,它有幾個實現,其中MemoryCacheManager是記憶體緩存的一個實現。 MemoryCacheManager: 緩存的添加,在需要的地方構建cache key然後調用ICacheManger介面存儲起來: 這個ICacheManger的Get方法其實 ...
  • 前言 如果你還不知道ZKEACMS,不妨先瞭解一下。 ASP.NET MVC 開源建站系統 ZKEACMS 推薦,從此網站“拼”起來 官方地址:http://www.zkea.net/zkeacms 下載地址:https://github.com/SeriaWei/ASP.NET-MVC-CMS/r ...
  • 命令模式:將一個請求封裝為一個對象,從而是你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支持可撤銷的操作。 命令模式有如下優點:1.它能較容易地設計一個命令隊列;2.在需要的情況下,可以較容易地將命令記入日誌;3.允許接收請求的一方決定是否要否決請求;4.可以容易地實現請求的撤銷和 ...
  • MXS&Vincene ─╄OvЁ &0000025─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很殘酷,明天更殘酷,後天很美好,但是絕大部分人是死在明天晚上,只有那些真正的英雄才能見到後天的太陽。 MXS&Vincene ─╄OvЁ:We're here to put ...
  • .net 分散式集群監控平臺,用於集群的性能監控,應用耗時監控管理,統一日誌管理等多維度的性能監控分析。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...