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: