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


Формат файла сборки .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 и на первый взгляд воспринимаются как библиотеки динамических ссылок Windows (библиотеки DLL) или исполняемые файлы приложений (EXE). Это очень полезная функция в Windows, где они могут маскироваться как нативные исполняемые двоичные файлы и получать такое же обращение (например, загрузка ОС, инструменты PE).

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

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

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

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