反射和 .NET Native

在 .NET Framework 中,托管开发支持通过反射 API 进行元编程。 反射允许你检查应用中的对象,调用通过检查发现的对象上的方法,在运行时间生成性类型,并支持所有其他动态代码方案。 它还支持序列化和反序列化,这允许一个对象的字段值被持久化并在后来得到还原。 这些方案都要求 .NET Framework 及时生成 (JIT) 编译器以可用的元数据为基础生成本机代码。

.NET Native 运行时不包括 JIT 编译器。 因此,所有所需的本机代码必需提前生成。 一组启发可用于确定应生成哪些代码,但是这些启发不能涵盖所有可能的元编程方案。 因此,必须通过使用运行时指令向这些元编程方案提供提示。 如果所需的元数据或实现代码在运行时不可用,应用将引发 MissingMetadataExceptionMissingRuntimeArtifactExceptionMissingInteropDataException 异常。 有两个疑难解答程序可用于为运行时指令文件提供合适的条目,指令文件将消除以下异常:

注意

有关提供为何需要运行时指令文件的背景的 .NET 本机编译过程的概述,请参阅 .NET 本机和编译

此外,.NET Native 不允许通过 .NET Framework 类库的私有成员进行反射。 例如,调用 TypeInfo.DeclaredFields 属性来检索一个 .NET Framework 类库类型的字段仅返回公共或受保护的字段。

以下文章提供了在应用中支持反射和序列化所需的概念和参考文档:

另请参阅