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 傳遞 coreAssemblyName 至 方法來 MetadataAssemblyResolver.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 則 不會擲回 。 它會從傳回的屬性清單中省略虛擬自訂屬性。

適用於