載入和執行使用者程式碼
更新:2007 年 11 月
撰寫主應用程式的理由是要設定執行 Managed 使用者程式碼的應用程式環境。就此而言,使用者程式碼意指不是主應用程式之一部分的任何 Managed 程式碼。例如,對於 Internet Explorer 主應用程式而言,構成 HTML 網頁的 Managed 控制項和指令碼就是使用者程式碼。對於應用程式伺服器主應用程式而言,含有這個應用程式伺服器所管理和執行之公司商務規則 (Business Rule) 的程式碼就是使用者程式碼。
所有 Managed 程式碼都屬於是 Assembly 類別的一部分。因此,可供載入和執行 Managed 程式碼的方法都是以組件為基底。例如,System.AppDomain 和 System.Reflection.Assembly 類別便包含可讓主應用程式載入組件的方法。Load 方法具備多種形式,有些則會採用組件名稱、有些會採用包含組件資訊清單 (Assembly Manifest) 等的檔案完整檔案系統路徑。這些方法是用來載入先前所建立並且儲存在磁碟上的組件。
例如,假設剛才描述的應用程式伺服器主應用程式可供使用者撰寫 Managed 程式碼的商務規則,以載入應用程式伺服器處理序並且執行。_ 當要求執行特定商務規則上之方法的要求到達應用程式伺服器時,伺服器的執行階段主應用程式碼便會決定要在哪一個應用程式定義域執行這個程式碼,或者是否必須建立一個新的應用程式定義域。然後執行階段主應用程式碼便會使用組件 Load 方法之一,將含有這項商務規則的組件載入,並且使用反映來執行該商務規則上的方法。如需詳細資訊,請參閱 System.Reflection 命名空間的文件。
System.Reflection.Emit 命名空間同時也提供以動態方式來建立組件的型別。如果應用程式正在處理指令碼的話,以這種方式載入組件會很有用處。
例如,假設有文字處理程式可供使用者自訂應用程式行為的巨集語言。在載入執行階段並建立應用程式定義域之後,文字處理程式可以將巨集指令碼編譯到 Managed 程式碼之中,並使用 System.Reflection.Emit 建立組件。然後就能將建立的組件載入應用程式定義域並執行。依據實際案例的不同,這個組件可能只會在應用程式的存留期內存在 (也就是說,永遠不會儲存在磁碟上)。