Поделиться через


Формат файла сборки .NET

В .NET определяется формат двоичного файла, сборки, которая используется для полного описания и размещения программ .NET. Сборки используются для самих программ, а также всех зависимых библиотек. Программа .NET может выполняться в виде одной сборки или нескольких, без других необходимых артефактов, помимо соответствующей реализации .NET. Внутренние зависимости, включая API операционной системы, — это отдельный вопрос, они не входят в формат сборки .NET, хотя иногда описываются в этом формате (например, WinRT).

Каждый компонент CLI содержит метаданные для объявления, реализации и ссылок, относящихся к этому компоненту. Таким образом, специфичные для компонента метаданные называются метаданными компонента, а итоговый компонент называется самоописывающим (см. ECMA 335 I.9.1. "Компоненты и сборки").

Формат полностью определен и стандартизирован в ECMA 335. Все компиляторы и среды выполнения .NET используют этот формат. Наличие документированного и редко обновляемого двоичного формата было важнейшим преимуществом (возможно, требованием) для совместимости. Этот формат последний раз претерпел существенное обновление в 2005 г. (.NET Framework 2.0), когда в него была включена универсальная архитектура и архитектура процессора.

Этот формат не зависит от процессора и операционной системы. Он используется как часть реализаций .NET, предназначенных для различных микросхем и процессоров. Хотя сам формат изначально создавался под Windows, его можно реализовать для любой операционной системы. Возможно, самым важным решением в плане совместимости для разных ОС стало то, что большинство значений хранятся в формате с прямым порядком байтов. Он не привязан к конкретному размеру машинного указателя (например, 32-разрядному, 64-разрядному).

Формат сборки .NET также отличается максимально содержательным описанием структуры программы или библиотеки. Он описывает внутренние компоненты сборки, в частности: ссылки на сборки, определенные типы и их внутреннюю структуру. Средства и интерфейсы API могут считывать и обрабатывать эти сведения для отображения или принятия программных решений.

Формат

Двоичный формат .NET основан на формате PE-файла Windows. В действительности библиотеки классов .NET являются совместимыми PE-файлами Windows и на первый взгляд выглядят как DLL-библиотеки Windows или исполняемые EXE-файлы. Это очень полезное свойство в Windows, где они могут маскироваться под внутренние исполняемые двоичные файлы и обрабатываться аналогично (например, загрузка ОС, средства PE).

Заголовки сборки

Заголовки сборки из стандарта ECMA 335 II.25.1. "Структура формата файла среды выполнения".

Обработка сборок

Можно создавать средства или API для обработки сборок. Сведения о сборке позволяют принимать программные решения во время выполнения, переписывать сборки, предоставлять API IntelliSense в редакторе и создавать документацию. System.Reflection, System.Reflection.MetadataLoadContext и Mono.Cecil — это хорошие примеры средств, которые часто используются для этой цели.