double arrow

Компоновочные блоки

Несмотря на то, что бинарные .NET-единицы имеют такие же расширения файлов, как СОМ-серверы и неуправляемые программы Win32 (*.dll или *.exe), но их внутреннее устройство и содержимое совершенно другое. Например, бинарные .NET-единицы содержат не специфические для конкретной платформы инструкции, а независимые от нее IL-инструкции и метаданные типов.



После создания *.dll или *.exe с помощью подходящего .NET-компилятора, соответствующий модуль упаковывается в компоновочный блок. Компоновочный блок содержит программный код на языке IL, который не компилируется в специфические для соответствующей платформы инструкции до тех пор, пока это не станет абсолютно необходимым. Обычно эта необходимость означает тот момент, когда на какой-то блок IL-инструкции выполняется ссылка для его использования в среде выполнения .NET.

В добавление к IL-инструкциям, компоновочные блоки содержат метаданные, которые подробно описывают особенности каждого типа внутри данной бинарной .NET -единицы. Метаданные .NET более совершенны по сравнении с метаданными СОМ. Бинарные СОМ-объекты обычно описываются с помощью библиотеки ассоциированных типов, а это почти то же самое, что и бинарная версия IDL-кода (язык определения интерфейсов). Проблема использования СОМ-информации состоит в том, что эта информация не обязательна и IDL-код не может документировать внешние серверы, которые нужны для правильного функционирования данного СОМ-сервера. В противоположность этому метаданные .NET присутствуют обязательно и автоматически генерируются соответствующим компилятором.

Наконец, в добавление к IL и метаданным типов, сами компоновочные блоки, также описываются с помощью метаданных, для которых используется специальное название манифест. Манифест содержит информацию о текущей версии компоновочного блока, информацию о "культуре" и список всех ссылок на внешние компоновочные блоки, которые требуются для правильного функционирования.

Во многих случаях компоновочные блоки .NET – это просто файлы двоичного кода (*.dll или *.exe). Можно считать, что файл двоичного кода и компоновочный блок – это одно и то же. Если строится приложение для настольной системы, то файл *.exe тоже можно считать компоновочным блоком. Строго говоря, компоновочные блоки могут состоять из одного модуля или из нескольких. Одномодульный компоновочный блок содержит весь необходимый код IL, метаданные и манифест в одном автономном отдельном пакете.

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


Сейчас читают про: