反映和 .NET Native

在 .NET Framework 中,Managed 開發可透過反映 API 來支援 metaprogramming。 反映可讓您檢查應用程式中的物件、在透過檢查發現的物件上呼叫方法、在執行階段產生新的類型,並可支援許多其他動態程式碼案例。 它也支援序列化和還原序列化,可讓物件的欄位值保存下來,並於稍後還原。 這些案例全都需要 .NET Framework just-in-time (JIT) 編譯器依據可用的中繼資料來產生機器碼。

.NET Native 執行階段不包含 JIT 編譯器。 因此,必須事先產生所有必要的機器碼。 系統會使用一組啟發學習法來判斷應該產生哪些程式碼,但這些啟發學習法無法涵蓋所有可能的 metaprogramming 案例。 因此,您必須使用執行階段指示詞,提供提示給這些 metaprogramming 案例。 如果在執行階段時未提供必要的中繼資料或實作程式碼,則應用程式會擲回 MissingMetadataExceptionMissingRuntimeArtifactExceptionMissingInteropDataException 例外狀況。 您可以使用兩個疑難排解工具,這些工具會產生可讓執行階段指示詞檔案消除例外狀況的適當項目:

注意

如需 .NET 原生編譯程序的概觀 (其提供需要執行階段指示詞檔案的背景資訊),請參閱 .NET 原生和編譯

此外,.NET Native 不允許您反映至 .NET Framework 類別庫的私用成員。 例如,呼叫 TypeInfo.DeclaredFields 屬性來擷取 .NET Framework 類別庫類型,只會傳回公用或受保護的欄位。

下列文章提供您在應用程式中支援反映和序列化時,所需的概念和參考文件:

另請參閱