生成腳本代碼文本
VB.Net腳本引擎使用的動態編譯技術,而動態編譯技術的第一個部分就是代碼生成器 ,腳本大部分代碼都是由主程序提供的,因此其代碼生成器也就是將原始的腳本代碼進行一 些封裝而已。【袁永福原創,轉載請注明出處】
根據上述對運行時腳本的設計,用戶 可以導入其他的名稱空間,於是腳本引擎定義了SourceImports屬性來自定義導入的名稱空間 ,定義該屬性的代碼如下
/// <summary>
/// 源代碼中使用的 名稱空間導入
/// </summary>
private StringCollection mySourceImports = new StringCollection();
/// <summary>
/// 源代碼中使用的名稱空間導入
/// </summary>
public StringCollection SourceImports
{
get
{
return mySourceImports;
}
}
在腳本引 擎的初始化過程中,程序會默認添加上System和Microsoft.VisualBasic兩個名稱空間。隨後 程序使用以下代碼來生成實際參與編輯的腳本代碼文本
// 生成編譯用的完整 的VB源代碼
string ModuleName = "mdlXVBAScriptEngine";
string nsName = "NameSpaceXVBAScriptEngIEn";
System.Text.StringBuilder mySource = new System.Text.StringBuilder();
mySource.Append("Option Strict Off");
foreach (string import in this.mySourceImports)
{
mySource.Append(""r"nImports " + import);
}
mySource.Append (""r"nNamespace " + nsName);
mySource.Append(""r"nModule " + ModuleName);
mySource.Append(""r"n");
mySource.Append (this.strScriptText);
mySource.Append(""r"nEnd Module");
mySource.Append(""r"nEnd Namespace");
string strRuntimeSource = mySource.ToString();
這段代碼功能也比較簡單,首先輸出“Option Strick Off”語句,然後使用mySourceImports輸出若干個Imports語句。這裡的 mySourceImports是一個字符串列表,用於存放引用的名稱空間,比如“System” ,“Microsoft.VisualBasic”等等,用於組成VB.NET腳本的Imports語句。然後 輸出Namespace和Module代碼塊來包括了用戶提供的原始代碼文本。這裡的strSourceText就 是用戶提供的原始代碼文本。最後變量 strRuntimeSource中就包含了實際運行的VB.Net代碼 文本。