Delphi - сбориник статей

       

Сборки



Сборки - фундаментальные части программирования с .NET Framework. Сборка выполняет перечисленные ниже функции.
  • Она содержит код, который выполняет CLR. СIL-код в файле формата РЕ не будет исполняться, если не имеет связанного с ним манифеста сборки. Учтите, что сборка может иметь только одну точку входа.
  • Она формирует границы защиты. Сборка есть блок, в котором запрашиваются и выдаются разрешения.
  • Она формирует границы типа. Каждый идентификатор типа включает имя сборки, в которой он расположен. Тип MyType, загруженный в пределах одной сборки, в общем случае может отличаться от одноименного, но загруженного в другую сборку.
  • Она определяет границы видимости ссылок. Сборочный манифест содержит метаданные, которые используются для разрешения ссылок и удовлетворения ресурсных требований. Манифест указывает экспортируемые типы и ресурсы и перечисляет другие сборки, от которых зависит данная сборка.
  • Она определяет границы версионного контроля. Сборка представляет собой минимальный блок в CLR, все типы и ресурсы которого имеют ту же версию, что и версия блока.
  • Она определяет единицу распространения. В момент старта должны быть загружены только первоначально вызванные сборки. Другие сборки, такие как ресурсы локализации или сборки, содержащие вспомогательные классы, могут загружаться по требованию. Это упрощает приложения и делает их меньше, что облегчает загрузку из Интернета.
  • Она является единицей, для которой поддерживается параллельное выполнение (side-by-side, см. ниже).

Если вы уже имели опыт работы с Delphi или Turbo Pascal, то заметите, что многие свойства сборок соответствуют свойствам модулей этих систем программирования.

Сборки могут быть статическими и динамическими. Статические сборки включают типы .NET Framework (интерфейсы и классы), а также нужные ресурсы. Статические сборки сохраняются на диске в виде РЕ-файлов. Вы можете использовать .NET Framework для создания динамических сборок, которые не сохраняются на диске и создаются (и запускаются) непосредственно в памяти. После выполнения динамическую сборку можно сохранить на диске.

Сборки созданы для упрощения распространения программ и для решения проблем версионного контроля, которые возникают в приложениях, основанных на компонентах.

В платформах Win32 возникают две проблемы совместимости версии.
  • Невозможно выразить версионные правила между частями приложения и обеспечить их реализацию силами ОС. Текущий подход руководствуется правилом обратной совместимости, которое часто трудно гарантировать. Определения интерфейсов должны быть статическими, раз и навсегда опубликованными и фрагменты кода должны поддерживать обратную совместимость. Более того, код обычно разрабатывается так, что в каждый момент времени на данном компьютере может быть установлена и запущена единственная версия объекта или DLL.
  • Нет путей согласования между наборами компонентов, которые собраны совместно, и набором, представленным в момент запуска.

Объединение этих двух проблем порождает конфликты DLL, когда инсталляция одного приложения может нарушить функциональность другого из-за того, что вновь установленный компонент или DLL не совместим с предыдущей версией. При возникновении такой ситуации у ОС нет средств обнаружения и устранения проблемы.

Windows 2000 (ХР) частично решает проблему с помощью двух приемов.
  • Windows 2000/ХР разрешает размещать вспомогательные DLL в ту же папку, что и исполняемый файл. Такие компоненты отыскиваются первыми и поэтому игнорируются другие версии.
  • Windows 2000/ХР блокирует файлы, которые помещаются в системную папку System32 при установке ОС, и не позволяет другим приложениям замещать их.
Для решения проблемы версионности сборки делают следующее.
  • Разрешают разработчику указывать версионные правила между различными компонентами.
  • Реализуют инфраструктуру поддержки версионности.
  • Реализуют параллельное (side-by-side) выполнение разных компонентов.

Параллельное выполнение объектов и приложений означает, что CLR дает приложению средства вызова той или иной версии DLL (объекта) для использования ее специфических возможностей. CLR разрешает параллельное исполнение произвольного количества разных версий одного объекта одновременно в рамках одной сборки.



Содержание раздела