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

Несмотря на то, что бинарные.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 и метаданные типов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



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