|
Объединение модулей для создания сборки
Файл Арр.ехе — не просто РЕ-файл с метаданными, а еще и сборка (assembly), т. е.
набор из одного или нескольких файлов с определениями типов и файлами ресурсов. Один из файлов сборки выбирают для хранения ее декларации. Декларация (manifest) — это еще один набор таблиц метаданных, которые в основном
содержат имена файлов, составляющих сборку. Эти таблицы также описывают
версию и региональные стандарты сборки, ее издателя, общедоступные экспортируемые типы, а также все составляющие сборку файлы.
CLR работает со сборками, т. е. сначала CLR всегда загружает файл с таблицами метаданных декларации, а затем получает из декларации имена остальных
файлов сборки. Некоторые характеристики сборки стоит запомнить:
• сборка определяет повторно используемые типы;
• сборка помечена номером версии;
• со сборкой может быть связана защитная информация.
У отдельных файлов сборки, кроме файла с таблицами метаданных декларации,
таких атрибутов нет.
Чтобы упаковать типы, сделать их доступными, а также обеспечить безопасность типов и управление их версиями, нужно поместить типы в модули, объединенные в сборку. Чаще всего сборка состоит из одного файла, как приложение
Арр.ехе в примере выше, но могут быть и сборки из нескольких РЕ-файлов с метаданными и файлов ресурсов, например .gif- или .jpg-файлов, Наверное, проще
представлять себе сборку как «логический* ЕХЕ- или DLL-файл.
Уверен, многим читателям интересно, зачем Microsoft понадобилось вводить
новую концепцию сборки. Дело в том, что сборка позволяет разграничить логическое и физическое понятия повторно используемых типов. Допустим, сборка
состоит из нескольких типов. При этом типы, используемые чаще всех, можно
поместить в один файл, а используемые реже — в другой. Если сборка развертывается путем загрузки через Интернет, клиент может вовсе отказаться от загрузки файла с редко используемыми типами, если он никогда их не использует. Так,
продавец ПО, специализирующийся на элементах управления пользовательского
интерфейса, может реализовать в отдельном модуле типы Active Accessibility (необходимые для соответствия требованиям логотипа Microsoft). Загружать этот
модуль потребуется лишь тем, кому нужны специальные возможности.
Можно настроить приложение так, чтобы оно загружало файлы сборки, определив в его конфигурационном файле элемент CodeBase . Этот
элемент идентифицирует URL, по которому можно найти все файлы сборки. При
попытке загрузить файл сборки CLR получает URL из элемента CodeBase и проверяет наличие нужного файла в локальном кэше загруженных файлов. Если он там
есть, то загружается, нет — CLR использует для загрузки файла в кэш адрес, указанный URL Если не удается найти нужный файл, CLR генерирует исключение
FileNotFoundExceptlon.
Я нашел три аргумента в поддержку многофайловых сборок. Они позволяют
следующее.
• Распределять типы по разным файлам Значит, можно избирательно загружать нужные файлы согласно сценарию загрузки из Интернета, а также частично упаковывать и развертывать типы, варьируя функциональность приложения.
• Добавлять к сборке файлы с ресурсами и данными Допустим, имеется тип для
расчета некоторой страховой суммы. Ему может потребоваться доступ к актуарным таблицам. Вместо встраивания актуалных таблиц в исходный текст
можно включить соответствующий файл с данными в состав сборки (например, с помощью компоновщика сборок AL.exe, который мы обсудим ниже).
Можно включать в сборки данные в любом формате: текстовом, в виде таблиц
Microsoft Excel или Microsoft Word, а также любом другом при условии, что ваше приложение способно анализировать содержимое этого файла.
• Создавать сборки, состоящие из типов, написанных на разных языках программирования При компиляции исходного текста на С#, компилятор создает
один модуль, а при компиляции исходного текста на Visual Basic — другой. Часть
типов может быть написана на С#, часть — на Visual Basic, а остальные — на
других языках программирования. Затем при помощи соответствующего инструмента все эти модули можно объединить в одну сборку. Использующий
такую сборку разработчик видит в ней лишь набор типов. Разработчики даже
не заметят, что применялись разные языки программирования. Кстати, при желании с помощью ILDasmexe можно получить файлы с исходным текстом всех
модулей на языке IL. После этого можно запустить ILAsm.exe и передать ему
полученные файлы, и ILAsm.exe выдаст файл, содержащий все типы. Для этого
компилятор исходного текста должен генерировать только IL-код, поэтому эту
методику нельзя использовать, скажем, с Visual C++.
Предыдущая стр.   
Оглавление   
Следующая стр.
Средняя оценка:     (1 - 1 голосов) Для оценки необходимо зарегистрироваться
Только зарегистрировавшиеся пользователи могут оставлять комментарии
|
|