Отражение и машинный код .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 возвращает только открытые или защищенные поля.
В следующих статьях представлена концептуальная и справочная документация, необходимая для поддержки отражения и сериализации в приложениях.
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по