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, так и другие ресурсы (например, управляющую информацию для многоязыковой поддержки). Все сборки всегда устанавливаются на диск, даже если бо́льшая часть из них не используется. Общий объем этих сборок занимает несколько гигабайт дискового пространства, что составляет немногим меньше половины всего пространства, занятого системой после установки на диск. Способы корректного удаления неиспользуемых сборок неизвестны.