интернациональное программирование N|M{INT3 TEAM}{NIM@INT3.RU} Спецвыпуск: Хакер, номер #065, стр. 065-032-3 2 НЕ СУЩЕСТВУЕТ ПУТИ ПОДДЕРЖКИ ЦЕЛОСТНОСТИ МЕЖДУ НАБОРАМИ КОМПОНЕНТОВ, СОБРАННЫХ ВМЕСТЕ, И НАБОРОМ, ПРИСУТСТВУЮЩИМ НА КОМПЬЮТЕРЕ В МОМЕНТ ВЫПОЛНЕНИЯ. В СУММЕ ЭТИ ДВА МОМЕНТА ОТСЛЕЖИВАНИЯ ВЕРСИЙ ПОРОЖДАЮТ КОНФЛИКТЫ DLL: УСТАНОВКА ОДНОГО ПРИЛОЖЕНИЯ МОЖЕТ НЕПРЕДУМЫШЛЕННО НАРУШИТЬ РАБОТУ ДРУГОГО СУЩЕСТВУЮЩЕГО ПРИЛОЖЕНИЯ, ПОСКОЛЬКУ ОПРЕДЕЛЕННЫЙ УСТАНАВЛИВАЕМЫЙ ПРОГРАММНЫЙ КОМПОНЕНТ ИЛИ DLL НЕ ПОЛНОСТЬЮ СОВМЕСТИМ С ПРЕДЫДУЩЕЙ ВЕРСИЕЙ. ЕСЛИ СКЛАДЫВАЕТСЯ ПОДОБНАЯ СИТУАЦИЯ, В СИСТЕМЕ НЕ НАХОДИТСЯ СРЕДСТВ ПОДДЕРЖКИ, НАПРАВЛЕННЫХ НА ДИАГНОСТИКУ И ИСПРАВЛЕНИЕ ОШИБКИ. Многие проблемы разработки были решены сборками .NET Framework. Поскольку сборки являются самодокументирующимися компонентами, независимыми от данных системного реестра, они никак не влияют на установку приложений. Кроме того, сборки упрощают удаление и копирование приложений. По сути, для установки любого .NET-приложения ты просто копируешь папку с программой и создаешь ярлык на рабочем столе :). Физический смысл сборки заключается в том, что одна сборка — это один исполняемый файл (либо exe, либо dll). Также существует системный кеш сборок, он располагается по адресу %WINDIR%\assembly\. В нем хранятся сборки, распространять которые вместе с программой не имеет смысла, — эти сборки входят в стандартную поставку дистрибутива .NET Framework. В общем случае статическая сборка может состоять из четырех элементов: 1 МАНИФЕСТ СБОРКИ, СОДЕРЖАЩИЙ ЕЕ МЕТАДАННЫЕ; 2 МЕТАДАННЫЕ ТИПОВ; 3 КОД, РЕАЛИЗУЮЩИЙ ТИПЫ, НА ПРОМЕЖУТОЧНОМ ЯЗЫКЕ MSIL; 4 НАБОР РЕСУРСОВ. Обязательным является лишь манифест сборки, однако остальные типы ресурсов необходимы чтобы обеспечить нужную функциональность сборки. Существует несколько способов сгруппировать эти элементы в сборку. Все они могут быть сгруппированы в единый физический файл так, как показано на следующей иллюстрации. Кроме того, элементы сборки могут содержаться в нескольких файлах: 1) в модулях откомпилированного кода (.netmodule), 2) в ресурсах (например в файлах .bmp или .jpg), 3) в других файлах, необходимых приложению. Сборка из нескольких файлов создается тогда, когда необходимо собрать модули, написанные на различных языках, и оптимизировать загрузку приложения, выделяя редко используемые пользовательские типы в модуль, который будет загружаться только при необходимости. Посмотри на картинку. Разработчик гипотетического приложения выделил в отдельный модуль некоторый вспомогательный код, а ресурс большого объема (.bmp-рисунок) оставил в первоначальном файле. Если используется .NET Framework, загрузка файла выполняется только при ссылке. Процесс загрузки кода оптимизируется, если код, ссылки на который используются редко, будет размещен в отдельном файле. Для файловой системы они являются тремя различными файлами. Отмечу, что файл Util.netmodule был откомпилирован как модуль, так как он не содержит данных о сборке. Когда создавалась сборка, ее манифест был добавлен к файлу MyAssembly.dll, что указывает на связь сборки с файлами Util.netmodule и Graphic.bmp. Когда проектируешь исходный код, реши для себя точно то, каким способом разделить функции приложения между одним или несколькими файлами. Аналогичные решения принимай при проектировании кода .NET Framework: каким способом разделить функции между одной или несколькими сборками. |