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

В .NET определяется формат двоичного файла, сборки, которая используется для полного описания и размещения программ .NET..NET defines a binary file format, assembly, that is used to fully describe and contain .NET programs. Сборки используются для самих программ, а также всех зависимых библиотек.Assemblies are used for the programs themselves as well as any dependent libraries. Программа .NET может выполняться в виде одной сборки или нескольких, без других необходимых артефактов, помимо соответствующей реализации .NET.A .NET program can be executed as one or more assemblies, with no other required artifacts, beyond the appropriate .NET implementation. Внутренние зависимости, включая API операционной системы, — это отдельный вопрос, они не входят в формат сборки .NET, хотя иногда описываются в этом формате (например, WinRT).Native dependencies, including operating system APIs, are a separate concern and are not contained within the .NET assembly format, although they are sometimes described with this format (for example, WinRT).

Каждый компонент CLI содержит метаданные для объявления, реализации и ссылок, относящихся к этому компоненту.Each CLI component carries the metadata for declarations, implementations, and references specific to that component. Таким образом, специфичные для компонента метаданные называются метаданными компонента, а итоговый компонент называется самоописывающим (см. ECMA 335 I.9.1. "Компоненты и сборки").Therefore, the component-specific metadata is referred to as component metadata, and the resulting component is said to be self-describing – from ECMA 335 I.9.1, Components and assemblies.

Формат полностью определен и стандартизирован в ECMA 335.The format is fully specified and standardized as ECMA 335. Все компиляторы и среды выполнения .NET используют этот формат.All .NET compilers and runtimes use this format. Наличие документированного и редко обновляемого двоичного формата было важнейшим преимуществом (возможно, требованием) для совместимости.The presence of a documented and infrequently updated binary format has been a major benefit (arguably a requirement) for interoperability. Этот формат последний раз претерпел существенное обновление в 2005 г. (.NET 2.0), когда в него была включена универсальная архитектура и архитектура процессора.The format was last updated in a substantive way in 2005 (.NET 2.0) to accommodate generics and processor architecture.

Этот формат не зависит от процессора и операционной системы.The format is CPU- and OS-agnostic. Он используется как часть реализаций .NET, предназначенных для различных микросхем и процессоров.It has been used as part of .NET implementations that target many chips and CPUs. Хотя сам формат изначально создавался под Windows, его можно реализовать для любой операционной системы.While the format itself has Windows heritage, it is implementable on any operating system. Возможно, самым важным решением в плане совместимости для разных ОС стало то, что большинство значений хранятся в формате с прямым порядком байтов.Its arguably most significant choice for OS interoperability is that most values are stored in little-endian format. Он не привязан к конкретному размеру машинного указателя (например, 32-разрядному, 64-разрядному).It doesn’t have a specific affinity to machine pointer size (for example, 32-bit, 64-bit).

Формат сборки .NET также отличается максимально содержательным описанием структуры программы или библиотеки.The .NET assembly format is also very descriptive about the structure of a given program or library. Он описывает внутренние компоненты сборки, в частности: ссылки на сборки, определенные типы и их внутреннюю структуру.It describes the internal components of an assembly, specifically assembly references and types defined and their internal structure. Средства и интерфейсы API могут считывать и обрабатывать эти сведения для отображения или принятия программных решений.Tools or APIs can read and process this information for display or to make programmatic decisions.

ФорматFormat

Двоичный формат .NET основан на формате PE-файла Windows.The .NET binary format is based on the Windows PE file format. В действительности библиотеки классов .NET являются совместимыми PE-файлами Windows и на первый взгляд выглядят как DLL-библиотеки Windows или исполняемые EXE-файлы.In fact, .NET class libraries are conformant Windows PEs, and appear on first glance to be Windows dynamic link libraries (DLLs) or application executables (EXEs). Это очень полезное свойство в Windows, где они могут маскироваться под внутренние исполняемые двоичные файлы и обрабатываться аналогично (например, загрузка ОС, средства PE).This is a very useful characteristic on Windows, where they can masquerade as native executable binaries and get some of the same treatment (for example, OS load, PE tools).

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

Заголовки сборки из стандарта ECMA 335 II.25.1. "Структура формата файла среды выполнения".Assembly Headers from ECMA 335 II.25.1, Structure of the runtime file format.

Обработка сборокProcess the assemblies

Можно создавать средства или API для обработки сборок.It is possible to write tools or APIs to process assemblies. Сведения о сборке позволяют принимать программные решения во время выполнения, перезаписывать сборки, предоставляя API IntelliSense в редакторе и формируя документацию.Assembly information enables making programmatic decisions at runtime, re-writing assemblies, providing API IntelliSense in an editor and generating documentation. System.Reflection, System.Reflection.MetadataLoadContext и Mono.Cecil — это хорошие примеры средств, которые часто используются для этой цели.System.Reflection, System.Reflection.MetadataLoadContext, and Mono.Cecil are good examples of tools that are frequently used for this purpose.