Side-by-side assembly — Википедия

Side-by-side Assembly (SxS) — технология устранения конфликтов между глобальными DLL в ОС Microsoft Windows.

Причина создания

[править | править код]

Технология SxS стала очередной попыткой решения проблемы DLL hell путём замены поиска библиотек по имени файла поиском по уникальному идентификатору сборки.

Реализация

[править | править код]

Из файлов, содержащих ресурсы, выносимые для общего использования процессами, формируется сборка (англ. assembly). При установке сборка размещается в подкаталоге системного каталога WinSxS, имеющем гарантированно уникальное имя, и регистрируется в системе под уникальным идентификатором. Программа, желающая использовать ресурсы из определённых сборок, указывает их идентификаторы в так называемом манифесте[англ.] — описателе свойств программы на языке XML, размещаемом либо внутри исполняемого файла, либо в отдельном файле с расширением .manifest.

Сборки обычно создаются из динамически подключаемых библиотек (DLL), однако в состав сборки могут входить любые файлы.

Сборки активно используются в .NET Framework.

На уровне операционной системы технология впервые введена в Windows XP, однако широкое применение получила, начиная с Windows Vista.

Достоинства

[править | править код]
  • Программы получили возможность однозначно указывать необходимые им ресурсы общего пользования (например, конкретные версии системных DLL).
  • Язык XML использует описания в текстовой форме, понятной человеку, но доступной для изменения любым текстовым редактором (при размещении манифеста в отдельном файле).

Недостатки

[править | править код]
  • Подготовка и установка сборки является более сложным и трудоемким процессом по сравнению с созданием DLL и традиционным размещением её в системном каталоге System32.
  • Сборка, содержащая даже единственную DLL, занимает больше дискового пространства, чем собственно DLL, и требует места для регистрации в системном реестре.
  • В системах, начиная с Windows Vista, присутствует множество сборок, содержащих как различные версий системных DLL, так и другие ресурсы (например, управляющую информацию для многоязыковой поддержки). Все сборки всегда устанавливаются на диск, даже если бо́льшая часть из них не используется. Общий объём этих сборок занимает несколько гигабайт дискового пространства, что составляет немногим меньше половины всего пространства, занятого системой после установки на диск. Способы корректного удаления неиспользуемых сборок неизвестны.