Сборки в .NET Framework

Сборка (assembly) - это логическая единица, содержащая скомпилированный код для .NET Framework.


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

Для инспектирования содержимого сборки, включая манифест и метаданные,
может использоваться Windows-утилита iddasm.
  Тот факт, что сборка содержит метаданные программы, означает, что приложение или другие сборки, которые вызывают код данной, не нуждаются в обращении к реестру или любому другому источнику данных, чтобы узнать, как конкретную сборку следует использовать. Это существенный прорыв по сравнению со старым способом работы COM, когда GUID-идентификаторы компонентов и интерфейсов необходимо быть извлекать из реестра, а подробности методов и свойств в некоторых случаях читать из библиотеки типов.
  Хранение данных в трех различных места приводило к очевидному риску получить несинхронизированные части, что исключало возможность использования данного компонента другим программным обеспечением. Что касается сборок, то здесь риск подобного рода исключен, потому что все метаданные хранятся вместе с исполняемыми инструкциями программы. Следует отметить, что несмотря на то, что сборки могут храниться в нескольких файлах, не возникает проблемы синхронизации, поскольку в том же файле, где находится точка входа, хранится и информация о содержимом остальных файлов. То есть даже если один из них подменить или испортить, это немедленно будет обнаружено, и всей сборке будет запрещено загружаться на исполнение. Сборки бывают двух видов: разделяемые и приватные.

Приватные сборки

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

Разделяемые сборки

  Далее рассмотрим разделяемые сборки, которые более универсальны и интересны с точки зрения реализации. Назначение разделяемых сборок - быть библиотеками общего применения, которые могут использоваться любым другим приложением. Так как любое приложение может получить доступ к сборке, то возникает вопрос безопасности, а именно такие вопросы:
  • Коллизия имен (возможен такой вариант что ваша сборка использует типы с теми же именами, что используются в разделяемой сборке).
  • Вопрос совместимости.
  Решением этих проблем является размещение разделенных сборок в поддереве файловой системе (GAC - global assembly cache) - глобальном кеше сборок. В глобальный кеш разделяемые сборки нужно инсталировать, а не просто копировать как в случае с файловой системой. Процесс может быть реализован массами утилит.



 

 

 
27.12.2008

Отзывы и комментарии

 


 
Тема
Ваше имя
Почтовый адрес
Текст сообщения
Ключ защиты:
Защита от спама
 
 
 
 
10.12  .NET Reactor
15.11  n
15.11  C# ClickOnce
 
01.08  Task Context
01.08  XLSX в Mono