Share via


裝載概觀

.NET Framework 應用程式會自動根據建置來裝載 Common Language Runtime。 如果您將 Managed 程式碼編譯為 .exe 組件,則當執行 .exe 時,執行階段會自動由 mscoree.dll 啟動。 Unmanaged 應用程式也可以因為裝載 Common Language Runtime 而獲益。 執行階段提供了用來擴充應用程式的架構,例如 Internet Information Services (IIS) 和 SQL Server 2005。

不論 .NET Framework 應用程式是否會像 Managed .exe 組件一樣自動叫用,還是使用 Unmanaged 裝載 API 加以載入,該應用程式都需要一段稱為執行階段主應用程式的程式碼。 執行階段主應用程式會將執行階段載入處理序中,並在該處理序中建立應用程式定義域,然後載入並執行這些應用程式定義域中的使用者程式碼。

.NET Framework 2.0 版讓裝載 CLR 的應用程式,可以控制許多執行階段功能。 您可以用自訂的實作 (Implementation) 取代某些功能,例如記憶體配置和組件的載入。 您可以控制其他功能的行為、在執行階段接收事件的告知,以及管理應用程式定義域。

.NET Framework 4 版 會合併許多 2.0 版裝載 API。 此外,.NET Framework 4 會支援同處理序並存執行階段主機啟動,並提供其他加強功能。

本概觀包含下列各節:

  • 初始化及啟動裝載的執行階段

  • .NET Framework 2.0 版裝載管理介面

  • .NET Framework 4 版裝載管理介面

  • 應用程式定義域管理員

  • 相關主題

  • 參考資料

初始化及啟動裝載的執行階段

.NET Framework 4 裝載 API 提供 CLRCreateInstance 函式,可以傳回 ICLRMetaHost 介面。 然後您可以指定特定的 CLR 版本,呼叫這個介面上的 GetRuntime 方法以取得特定的 ICLRRuntimeInfo 介面。 這個程序會取代 .NET Framework 2.0 裝載 API 所使用的 CorBindToRuntimeEx 方法。

.NET Framework 2.0 版裝載 API 提供 CorBindToRuntimeEx 函式,以初始化執行階段。 您可以選擇要載入哪一個執行階段版本,但是一個處理序只能裝載一個版本。 如果已載入 2.0、3.0 或 3.5 版,這個函式會傳回 ICLRRuntimeHost 介面,用來啟動執行階段及執行 Managed 程式碼。

.NET Framework 1 版裝載 API 提供 ICorRuntimeHost 介面。

啟動執行階段的內容在將 Common Language Runtime 載入處理序中,執行 Managed 程式碼的內容在轉換為 Managed 裝載程式碼中會有詳細的討論。

回到頁首

.NET Framework 2.0 裝載 Management 介面

在 .NET Framework 2.0 版中,CLR 可裝載管理介面以控制裝載之執行階段的許多功能、讓主應用程式可以實作執行階段所提供的其他管理介面,並可讓您實作自己的裝置管理介面。

為了進行探索,可將管理介面分為兩個廣泛的類型:

  • 主應用程式所實作,且執行階段透過 IHostControl 介面所探索的管理介面。

  • CLR 所提供,且主應用程式透過 ICLRControl 介面所探索的管理介面。

下表根據介面所提供的功能種類來對介面進行分類, 會先列出每一個群組中最重要的介面。

群組

功能

介面

組件載入管理

可讓主應用程式 (Host) 自訂載入組件的位置、管理版本的方式,以及可以載入哪些格式的組件。 例如,組件可以從資料庫載入,而不是從硬碟的檔案載入。

此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。

IHostAssemblyManager

IHostAssemblyStore

ICLRAssemblyReferenceList

ICLRAssemblyIdentityManager

原則管理

可讓主應用程式指定處理程式失敗的方式,以支援不同的可靠性需求。

主應用程式會使用 ICLRControl 介面存取執行階段管理員,並為執行階段傳回的失敗通知,實作 IHostPolicyManager 回呼 (Callback)。

ICLRPolicyManager

IHostPolicyManager

主應用程式保護管理

避免使用指定的型別或成員,讓主應用程式強制執行它自己的程式撰寫模型 (Programming Model)。 例如,主應用程式可不允許使用執行緒或同步處理原始物件。

這個主應用程式會使用 ICLRControl 介面來存取執行階段管理員。

ICLRHostProtectionManager

記憶體管理

以取代 CLR 用於配置記憶體的作業系統函式的方式,讓主應用程式控制記憶體配置。

此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。

IHostMemoryManager

IHostMAlloc

ICLRMemoryNotificationCallback

記憶體回收管理

可讓主應用程式實作方法,在記憶體回收開始和結束時接收通知。 可讓主應用程式初始化集合、收集統計資料,並指定集合的某些特性。

這個主應用程式會使用 ICLRControl 介面來存取執行階段管理員。 此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。

IHostGCManager

ICLRGCManager

偵錯管理

可讓主應用程式探索是否已附加偵錯工具、提供額外的偵錯資訊以及自訂偵錯工作。

這個主應用程式會使用 ICLRControl 介面來存取執行階段管理員。

ICLRDebugManager

CLR 事件管理

可讓主應用程式註冊由 EClrEvent 所列舉的事件通知。

主應用程式會使用 ICLRControl 介面,存取執行階段管理員,並使用 IActionOnCLREvent 介面以實作事件處理常式。

ICLROnEventManager

IActionOnCLREvent

工作管理

可讓主應用程式在執行緒於 Managed 和 Unmanaged 程式碼之間轉換時收到通知。 可讓主機控制執行緒相似性、啟動和結束工作的時機,以及如何排程執行緒。

此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。

IHostTaskManager

ICLRTaskManager

IHostTask

ICLRTask

執行緒集區管理

可讓主應用程式針對要使用的執行階段實作它自己的執行緒集區。

此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。

IHostThreadPoolManager

同步處理管理

可讓主應用程式針對要使用的執行階段實作它自己的同步處理基礎。 主應用程式可以提供事件、關鍵區段 (Critical Section) 和號誌 (Semaphore)。

此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。

IHostSyncManager

ICLRSyncManager

IHostCrst

IHostManualEvent

IHostAutoEvent

IHostSemaphore

I/O 完成管理

可讓主應用程式實作它自己的非同步 (Asynchronous) 輸入/輸出實作 (Implementation)。

此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。

IHostIoCompletionManager

注意事項注意事項

如需舊版執行階段之裝載介面的詳細資訊,請參閱 .NET Framework 1.0 和 1.1 裝載介面

回到頁首

.NET Framework 4 裝載 Management 介面

.NET Framework 4 會在下列介面中合併 2.0 裝載 API:

  • ICLRMetaHost 提供會方法,以便傳回特定版本的 CLR、列出所有已安裝的 CLR、列出所有同處理序執行階段、傳回啟動介面,以及探索用來編譯組件的 CLR 版本。

  • ICLRMetaHostPolicy 提供 GetRequestedRuntime 方法,這個方法會根據原則條件、Managed 組件、版本以及組態檔,提供 CLR 介面。

  • ICLRRuntimeInfo 提供方法,這些方法會傳回有關特定執行階段的資訊,包括版本、目錄及載入狀態。

  • ICLRStrongName 會將 MSCorEE.dll 所匯出的所有 CLR 2.0 版強式命名全域靜態函式 (StrongNameErrorInfo 除外),群組至單一介面。 所有 ICLRStrongName 方法都會傳回標準的 COM HRESULTS。

這些介面會封裝和取代 .NET Framework 2.0 裝載介面。

回到頁首

應用程式定義域管理員

如果是裝載 Common Language Runtime 的程式,應用程式定義域會隔離各組件以提供更高的可靠性。 可以藉由卸載應用程式定義域來從處理序卸載組件。

為了管理多個應用程式定義域,.NET Framework 會提供 AppDomainManager 類別做為基底類別 (Base Class),您可以從這個類別衍生自己的應用程式定義域管理員。 您為主應用程式 (Host Application) 設計的應用程式定義域管理員基本上是主應用程式的擴充功能 (以 Managed 程式碼撰寫), 它會自動載入處理序內建立的每個應用程式定義域中。

應用程式定義域管理員可藉由排除 Managed 和 Unmanaged 程式碼之間的某些轉換而提高效能, 它可以接收建立新應用程式定義域的通知,讓您有機會可以進行設定。 應用程式定義域管理員也可為 Unmanaged 主機提供一個方法來呼叫 Managed 程式碼。

回到頁首

相關主題

標題

描述

將 Common Language Runtime 載入處理序

描述如何將執行階段載入至處理序、初始化,以及設定值以指定其行為。

卸載應用程式定義域和關閉處理序

描述如何卸載應用程式定義域和關閉處理序。

設定以角色為基礎的安全性原則和主體

描述如何設定角色架構安全性原則。

設定應用程式定義域層級的安全性原則

描述如何設定應用程式定義域層級的安全性原則。

載入和執行使用者程式碼

描述如何載入和執行使用者程式碼。

建立和設定應用程式定義域

描述如何建立和設定要在其中執行使用者程式碼的應用程式定義域。

決定應用程式定義域界限

描述如何決定要在哪裡設定新應用程式定義域的界限。

轉換為 Managed 裝載程式碼

描述如何從 Unmanaged 程式碼轉換到執行 Managed 裝載程式碼和使用者程式碼。

啟動組態檔

描述如何啟用非應用程式組態檔中所指定的執行階段版本。

執行階段主應用程式

說明 .NET Framework 隨附的主應用程式。

應用程式定義域

描述主應用程式用來隔離在處理序中執行之程式碼的建構。

並存執行

描述執行多重版本的應用程式、元件或執行階段。

.NET Framework 4 裝載介面

描述在 .NET Framework 4 版中裝載執行階段的 Unmanaged 介面。

.NET Framework 2.0 裝載介面

描述在 .NET Framework 2.0 版中裝載執行階段的 Unmanaged 介面。

回到頁首

參考資料

System.AppDomainManager

回到頁首