Отражение и машинный код .NET
В платформа .NET Framework управляемая разработка поддерживает метапрограммирование с помощью API отражения. Отражение позволяет проверять объекты в приложении, вызывать методы для объектов, обнаруженные в результате проверки, создавать новые типы во время выполнения и поддерживает множество других сценариев динамического кода. Оно также поддерживает сериализацию и десериализацию, позволяющую сохранять значения полей объекта и восстанавливать их позже. Все эти сценарии требуют использования JIT-компилятора платформы .NET Framework для генерации машинного кода на основе имеющихся метаданных.
Среда выполнения .NET Native не включает компилятор JIT. В результате все необходимые машинные коды должны быть созданы заранее. Используется набор эвристических правил, чтобы определить, какой код должен создаваться, но они не могут охватывать все возможные сценарии метапрограммирования. Таким образом, необходимо предоставить подсказки для этих сценариев метапрограммирования с помощью директив среды выполнения. Если необходимые метаданные или код реализации недоступны во время выполнения, приложение вызывает исключение MissingMetadataException, MissingRuntimeArtifactException или MissingInteropDataException. Существуют два средства устранения неполадок, создающие соответствующую запись для файла директив среды выполнения, который устраняет исключение.
Средство устранения неполадок MissingMetadataException для типов.
Средство устранения неполадок MissingMetadataException для методов.
Примечание.
Общие сведения о процессе компиляции машинного кода .NET, обосновывающие необходимость файла директив среды выполнения, см. в разделе Машинный код .NET и компиляция.
Кроме того, .NET Native не позволяет отражать частные члены библиотеки классов платформа .NET Framework. Например, вызов свойства TypeInfo.DeclaredFields для извлечения полей типа библиотеки классов платформы .NET Framework возвращает только открытые или защищенные поля.
В следующих статьях приведены концептуальные и справочные документы, необходимые для поддержки отражения и сериализации в приложениях: