程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第十四講 基於動態編譯的VB.NET腳本引擎(上)(7)

C#發現之旅第十四講 基於動態編譯的VB.NET腳本引擎(上)(7)

編輯:關於C語言
譯腳本

程序生成完整的VB.Net腳本代碼文本後就可以編譯了,為了 提高效率,這裡袁某定義了一個靜態myAssemblIEs的哈希列表變量,定義該變量的代碼如下

/// <summary>
/// 所有緩存的程序集
///  </summary>
private static Hashtable myAssemblIEs = new  Hashtable();

該列表緩存了以前編輯生成的程序集,鍵值就是腳本文本,鍵 值就是程序集。若緩存區中沒有找到以前緩存的程序集那腳本引擎就可以調用VB.Net編譯器 編輯腳本了。

為了豐富腳本引擎的開發接口,筆者使用以下代碼定義了 ReferencedAssemblIEs屬性。

/// <summary>
/// VB.Net編譯 器參數
/// </summary>
private CompilerParameters  myCompilerParameters = new CompilerParameters();
/// <summary>
/// 引用的名稱列表
/// </summary>
public StringCollection  ReferencedAssemblIEs
{
    get
    {
         return myCompilerParameters.ReferencedAssemblIEs;
    }
}

ReferencedAssemblIEs保存了編輯腳本時使用的程序集,在初始化腳本引擎 時,系統已經默認向該列表添加了mscorlib.dll、System.dll、System.Data.dll、 System.XML.dll、System.Drawing.dll、System.Windows.Forms.dll、 Microsoft.VisualBasic.dll等.Net框架標准程序集,用戶可以使用該屬性添加第三方程序集 來增強腳本引擎的功能。

在前面的說明中,為了實現全局對象和全局函數,需要在VB.Net編譯器的命令上中使用 imports指令導入全局對象和全局函數所在的名稱空間,為此筆者定義了一個 VBCompilerImports的屬性來保存這些名稱空間,定義該屬性的代碼如下

///  <summary>
/// VB編譯器使用的名稱空間導入
///  </summary>
private StringCollection myVBCompilerImports = new  StringCollection();
/// <summary>
/// VB編譯器使用的名稱空間導 入
/// </summary>
public StringCollection VBCompilerImports
{
    get
    {
        return  myVBCompilerImports;
    }
}

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