Объединение модулей
для создания сборки
Файл
Program exe
— это не просто PE-файл с метаданными, а еще и
сборка
(assembly),
то есть совокупность одного или нескольких файлов с определениями типов и фай-
лов ресурсов. Один из файлов сборки выбирается для хранения ее манифеста.
Ма-
нифест
(manifest) — это еще один набор таблиц метаданных, которые в основном
содержат имена файлов, составляющих сборку. Кроме того, эти таблицы описывают
версию и региональные стандарты сборки, ее издателя, общедоступные экспорти-
руемые типы, а также все составляющие сборку файлы.
CLR работает со сборками, то есть сначала CLR всегда загружает файл с та-
блицами метаданных манифеста, а затем получает из манифеста имена остальных
файлов сборки. Некоторые характеристики сборки стоит запомнить:
в сборке определены многократно используемые типы;
сборке назначается номер версии;
со сборкой может быть связана информация безопасности.
У отдельных файлов сборки, кроме файла с таблицами метаданных манифеста,
таких атрибутов нет.
Чтобы упаковать типы, а также обеспечить безопасность типов и управление
их версиями, нужно поместить типы в модули, объединенные в сборку. Чаще всего
сборка состоит из одного файла, как приложение
Program exe
в рассмотренном при-
мере, но могут быть и сборки из нескольких файлов: PE-файлов с метаданными
72
Глава.2 .Компоновка,.упаковка,.развертывание.и.администрирование.приложений
и файлов ресурсов, например GIF- или JPG-файлов. Наверное, проще представлять
себе сборку как «логический» EXE- или DLL-файл.
Уверен, многим читателям интересно, зачем компании Microsoft понадобилось
вводить новое понятие — «сборка». Дело в том, что сборка позволяет разграничить
логическое и физическое понятия многократно используемых типов. Допустим,
сборка состоит из нескольких типов. При этом типы, применяемые чаще всех,
можно поместить в один файл, а применяемые реже — в другой. Если сборка раз-
вертывается путем загрузки через Интернет, клиент может вовсе не загружать файл
с редко используемыми типами, если он никогда их не задействует. Например,
независимый поставщик ПО (independent software vendor, ISV), специализирую-
щийся на разработке элементов управления пользовательского интерфейса, может
реализовать в отдельном модуле типы Active Accessibility (необходимые для со-
ответствия требованиям логотипа Microsoft). Загружать этот модуль достаточно
лишь тем, кому нужны специальные возможности.
Можно настроить приложение так, чтобы оно загружало файлы сборки, опреде-
лив в его конфигурационном файле элемент
codeBase
(см. подробнее главу 3). Этот
элемент идентифицирует URL-адрес, по которому можно найти все файлы сборки.
При попытке загрузить файл сборки CLR получает URL из элемента
codeBase
и проверяет наличие нужного файла в локальном кэше загруженных файлов. Если
файл там присутствует, то он загружается, если нет — CLR использует для загрузки
файла в кэш URL-адрес. Если найти нужный файл не удается, CLR генерирует ис-
ключение
FileNotFoundException
.
У меня есть три аргумента в пользу применения многофайловых сборок.
Можно распределять типы по нескольким файлам, допуская избирательную
загрузку необходимых файлов из Интернета, а также частично упаковывать
и развертывать типы, варьируя функциональность приложения.
Можно добавлять к сборке файлы с ресурсами и данными. Допустим, имеется
тип для расчета некоторой страховой суммы. Ему может потребоваться доступ
к актуарным таблицам. Вместо встраивания актуарных таблиц в исходный код
можно включить соответствующий файл с данными в состав сборки (например,
с помощью компоновщика сборок
AL exe
, который рассмотрен далее). В сборки
можно включать данные в любом формате: в текстовом, в виде таблиц Microsoft
Excel или Microsoft Word, а также в любом другом при условии, что приложение
способно разобрать данные в этом формате.
Сборки могут состоять из типов, написанных на разных языках программиро-
вания. Одна часть типов может быть написана на C#, другая — на Visual Basic,
остальные — на других языках программирования. При компиляции исходного
текста на языке C# компилятор создает один модуль, а при компиляции ис-
ходного текста на Visual Basic — другой. Затем при помощи соответствующего
инструмента все эти модули объединяются в одну сборку. Использующие такую
сборку разработчики увидят в ней лишь набор типов. Разработчики даже не за-
73
Объединение.модулей.для.создания.сборки
метят, что применялись разные языки программирования. Кстати, при желании
с помощью
ILDasm exe
можно получить файлы с исходным текстом всех моду-
лей на языке IL. После этого можно запустить утилиту
ILAsm exe
и передать ей
полученные файлы, и утилита выдаст файл, содержащий все типы. Для этого
компилятор исходного текста должен генерировать только IL-код.
Do'stlaringiz bilan baham: |