MetadataLoadContext.CoreAssembly 屬性

定義

取得或設定表示裝載已知型別 (例如 Int32) 之「系統組件」的組件。

public:
 property System::Reflection::Assembly ^ CoreAssembly { System::Reflection::Assembly ^ get(); };
public System.Reflection.Assembly CoreAssembly { get; }
public System.Reflection.Assembly? CoreAssembly { get; }
member this.CoreAssembly : System.Reflection.Assembly
Public ReadOnly Property CoreAssembly As Assembly

屬性值

Assembly 執行個體。

備註

核心元件處理方式與其他元件不同,因為這些已知類型的參考不包含元件參考,與一般類型不同。

一般而言,此元件名為 「mscorlib」 或 「netstandard」。。 如果找不到核心元件,此值會是 null,而許多其他反映方法,包括剖析方法簽章的方法,將會擲回例外狀況。

CoreAssembly藉由將傳遞至建構函式的參數MetadataAssemblyResolver傳遞coreAssemblyNameMetadataAssemblyResolver.Resolve 方法來決定。

如果在 的建MetadataLoadContext構函式中未指定任何coreAssemblyName自變數,則會使用預設值,包括 “mscorlib”、“System.Runtime” 和 “netstandard”。

指定的核心元件不需要直接包含核心類型。 它可以輸入轉送至其他元件。 因此,使用 mscorlib 外觀做為指定的核心元件是完全允許的。

請注意, System.Runtime 這不是理想的核心元件,因為它會排除某些與 Interop 相關的虛擬自訂屬性類型,例如 DllImportAttribute。 不過,如果您對這些屬性沒有興趣,它可以提供服務。 如果核心元件不包含必要的類型,CustomAttributes API 將會略過這些屬性。

在必要之前,不會載入核心元件。 下列 API 不會觸發核心元件的搜尋:

如果找不到核心元件,或核心元件缺少類型,這會影響 的行為 MetadataLoadContext ,如下所示:

  • 需要剖析簽章或 typespec 並傳回結果的 API,因為 Type 對象會擲回例外狀況。 例如:

  • 需要比較型別與已知核心型別的 API 不會擲回例外狀況,而且比較會評估為 false。 例如,如果您未指定核心元件, IsPrimitive 則會針對所有項目傳回 false ,甚至是名為 Int32的類型。 同樣地, Type.GetTypeCode 將會針對所有項目傳回 Object

  • 如果元資料實體將介面旗標設定為虛擬自訂屬性,而且核心元件不包含虛擬自定義屬性類型、必要的建構函式或任何建構函式的參數類型, MetadataLoadContext 則不會擲回 。 它會從傳回的屬性清單中省略虛擬自定義屬性。

適用於