共用方式為


決定應用程式定義域界限

更新:2007 年 11 月

在裝載程式碼從 Unmanaged 程式碼轉換為 Managed 程式碼之後,它必須建立一個或多個要在其中執行使用者程式碼的新應用程式定義域。應用程式定義域是主應用程式用來隔離在處理序中執行之程式碼的建構。這種隔離是很有必要的,它可以確保不應互動的程式碼就不能互動。例如,假設從兩個不同網站下載到 Internet Explorer 主應用程式的程式碼必須要保持分隔。Internet Explorer 主應用程式就會針對每個網站建立一個應用程式定義域,來確保這種隔離。

主應用程式在建立要在其中執行使用者程式碼的應用程式定義域之前,必須先決定新應用程式定義域的界限應該在哪裡。會影響這項決定的因素包括對於限制特定型別存取其他型別的需求、組態、安全性,以及當不再需要程式碼時將它卸載的能力。

限制對型別的存取

在應用程式定義域執行的某種型別可以探索在應用程式定義域中執行的其他型別並且直接呼叫它們。但是,一種型別永遠不會探索在其他應用程式定義域中執行的型別,也不會因此而呼叫它們。限制某一型別存取其他型別的能力,是決定要在哪裡建立應用程式定義域界限的首要考量。

組態設定

應用程式定義域是 Runtime 中組態的基本單位。每個應用程式定義域都有個選擇性關聯的組態檔,用來描述在應用程式定義域中執行之程式碼的相關設定。

例如,組態檔可以含有要在其中尋找私用 (Private) 組件的目錄清單、共用組件的版本繫結資訊、可遠端存取之型別的位置等等。

安全性

主應用程式可以同時對一個應用程式定義域設定程式碼存取安全性原則和以角色為基礎的安全性原則。這樣可以讓主應用程式控制授與特定應用程式定義域中之程式碼的權限集,並且對以角色為基礎的安全性同時設定目前執行緒的主體和預設主體。

例如,主應用程式可以定義應用程式定義域層級的程式碼存取安全性原則,來確保在應用程式定義域中只能執行從特定網站所下載的程式碼。此外,主應用程式也可以設定以角色為基礎的安全性主體來實作自訂驗證配置。

程式碼卸載

若要從記憶體中卸載處理序中執行的 Managed 程式碼,以便記憶體能使用於其他用途,主應用程式必須卸載執行這個程式碼的應用程式定義域,不能卸載個別組件或型別。主應用程式有它自己的規則,用來管制您什麼時候可以卸載使用者程式碼。例如,網際網路瀏覽器可能會將一些 Managed 控制項載入由網站決定的應用程式定義域中。而瀏覽器本身可能有一些規則會讓它將最近瀏覽的網頁保存在記憶體中,讓 [下一頁] 和 [上一頁] 按鈕能夠更快速地回應。當瀏覽器判斷某一網頁已不需要存在記憶體中時,它就會刪除這個應用程式定義域,而同時也就刪除了這些 Managed 控制項的程式碼。

請參閱

其他資源

裝載 Common Language Runtime

應用程式定義域