程序生成完整的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;
}
}