AssemblyLoadContext 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
代表組件載入範圍的執行階段概念。
public ref class AssemblyLoadContext
public ref class AssemblyLoadContext abstract
public class AssemblyLoadContext
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public Class AssemblyLoadContext
Public MustInherit Class AssemblyLoadContext
- 繼承
-
AssemblyLoadContext
備註
AssemblyLoadContext表示載入內容。 在概念上,載入內容會建立一個範圍,以便載入、解析和可能卸載一組元件。
AssemblyLoadContext主要是為了提供元件載入隔離。 它允許在單一進程中載入多個相同元件的版本。 它會取代.NET Framework中多個 AppDomain 實例所提供的隔離機制。
注意
- AssemblyLoadContext 不提供任何安全性功能。 所有程式碼都有進程的完整許可權。
- 在 .NET Core 2.0 - 2.2 中, AssemblyLoadContext 只有抽象類別。 若要在這些版本中建立具體類別,請實作 AssemblyLoadContext.Load(AssemblyName) 方法。
執行時間中的使用量
執行時間會實作兩個元件載入內容:
- AssemblyLoadContext.Default 表示執行時間的預設內容,用於應用程式主要元件及其靜態相依性。
- 方法會 Assembly.LoadFile(String) 藉由具現化最基本的 AssemblyLoadContext 來隔離所載入的元件。 它具有簡化的隔離配置,可載入其本身 AssemblyLoadContext 且沒有相依性解析的每個元件。
應用程式使用情況
應用程式可以自行 AssemblyLoadContext 建立,以針對進階案例建立自訂解決方案。 自訂著重于定義相依性解析機制。
AssemblyLoadContext提供兩個擴充點來實作 Managed 元件解析:
- 方法 AssemblyLoadContext.Load(AssemblyName) 提供 解析、載入和傳回元件的第一個機會 AssemblyLoadContext 。 AssemblyLoadContext.Load(AssemblyName)如果方法傳
null
回 ,載入器會嘗試將元件 AssemblyLoadContext.Default 載入 。 - AssemblyLoadContext.Default如果 無法解析元件,原始 AssemblyLoadContext 會取得第二次解析元件的機會。 執行時間會 Resolving 引發 事件。
此外, AssemblyLoadContext.LoadUnmanagedDll(String) 虛擬方法允許自訂預設 Unmanaged 元件解析。 預設實作會傳 null
回 ,這會導致執行時間搜尋使用其預設搜尋原則。 預設搜尋原則足以用於大部分的案例。
技術挑戰
無法在單一進程中載入多個版本的執行時間。
警告
載入多個複本或不同版本的架構元件可能會導致非預期且難以診斷的行為。
提示
使用具有遠端處理或處理序間通訊的進程界限來解決此隔離問題。
元件載入的時間可能會讓測試和偵錯變得困難。 元件通常會載入,而不會立即解析其相依性。 相依性會視需要載入:
- 當程式碼分支至相依元件時。
- 當程式碼載入資源時。
- 當程式碼明確載入元件時。
的 AssemblyLoadContext.Load(AssemblyName) 實作可以新增可能需要隔離的新相依性,以允許不同的版本存在。 最自然的實作會將這些相依性放在預設內容中。 仔細設計可以隔離新的相依性。
相同的元件多次載入至不同的內容。
- 這可能會導致混淆的錯誤訊息,例如「無法將類型為 'Sample.Plugin' 的物件轉換成 'Sample.Plugin'」。
- 跨隔離界限封送處理是非簡單的。 典型的解決方案是使用只載入預設載入內容之元件中定義的介面。
建構函式
AssemblyLoadContext() |
初始化 AssemblyLoadContext 類別的新執行個體。 |
AssemblyLoadContext(Boolean) |
以指示是否啟用卸載的值來初始化 AssemblyLoadContext 類別的新執行個體。 |
AssemblyLoadContext(String, Boolean) |
以指示是否啟用卸載的名稱和值來初始化 AssemblyLoadContext 類別的新執行個體。 |
屬性
All |
傳回所有 AssemblyLoadContext 執行個體的集合。 |
Assemblies |
傳回載入至 AssemblyLoadContext 之 Assembly 執行個體的集合。 |
CurrentContextualReflectionContext |
取得 EnterContextualReflection() 最近呼叫所設定的 AssemblyLoadContext。 |
Default |
取得預設 AssemblyLoadContext。 預設內容包含主應用程式組件及其靜態相依性。 |
IsCollectible |
取得指出此 AssemblyLoadContext 是否為可回收的值。 |
Name |
取得 AssemblyLoadContext 的名稱。 |
方法
事件
Resolving |
若嘗試載入至這項組件載入內容,解析組件失敗時就會發生這種情況。 |
ResolvingUnmanagedDll |
發生於原生程式庫解析失敗時。 |
Unloading |
發生於卸載 AssemblyLoadContext 時。 |
適用於
另請參閱
意見反應
提交並檢視相關的意見反應