Формат файла сборки .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 — это хорошие примеры средств, которые часто используются для этой цели.