Основные понятия, связанные с изолированными приложениями и параллельными сборками
Обновлен: Ноябрь 2007
Приложение называется изолированным, если все его компоненты являются параллельными сборками. Параллельная сборка представляет собой коллекцию ресурсов (группу библиотек DLL, классов окон, серверов COM, библиотек типов или интерфейсов), которые могут использоваться приложением во время выполнения. Обычно параллельная сборка — это одна или несколько библиотек DLL. Например, сборка библиотеки времени выполнения C содержит три библиотеки DLL — msvcr90.dll, msvcm90.dll и msvcp90.dll — и используется приложениями, построенными с использованием функций из библиотеки времени выполнения C.
Совместно используемые и закрытые сборки
Параллельная сборка может быть совместно используемой или закрытой. Совместно используемые параллельные сборки могут использоваться несколькими приложениями, в манифестах которых задана зависимость от такой сборки. Несколько версий параллельных сборок могут совместно использоваться разными приложениями, выполняющимися в одно и то же время. Закрытая сборка —это сборка, которая разворачивается с приложением, и которую может использовать только это приложение. Закрытые сборки устанавливаются в папку, содержащую исполняемый файл приложения, или в одну из ее вложенных папок.
Манифесты и порядок поиска
Как изолированные приложения, так и параллельные сборки описываются манифестами. Манифест представляет собой XML-документ, который может быть внешним XML-файлом или ресурсом, встроенным в приложение или сборку. Файл манифеста изолированного приложения используется для управления именами и версиями совместно используемых параллельных сборок, с которыми должно быть связано приложение во время выполнения. Манифест параллельной сборки задает имена, версии, ресурсы и зависимые сборки параллельных сборок. Манифест совместно используемой параллельной сборки устанавливается в папку WinSxS\Manifests. Манифест закрытой сборки рекомендуется включать в библиотеку DLL как ресурс с идентификатором, равным 1, а имя закрытой сборки может быть таким же, как имя соответствующей библиотеки DLL. Дополнительные сведения см. в разделе Закрытые сборки.
Во время выполнения Windows использует данные о сборке из манифеста приложения для поиска и загрузки соответствующей параллельной сборки. Если в изолированном приложении указана зависимость от сборки, то операционная система сначала выполняет поиск сборки среди совместно используемых сборок в папке WinSxS. Если в этой папке нужная сборка не обнаруживается, то операционная система выполняет поиск закрытой сборки, установленной в папке структуры каталога приложения. Дополнительные сведения см. в разделе Порядок поиска сборки.
Изменение зависимостей
Существует возможность изменения зависимостей параллельной сборки после развертывания приложения путем изменения файлов конфигурации издателя и файлов конфигурации приложения. Файл конфигурации издателя, также называемый файлом политики издателя, представляет собой XML-файл, который глобально перенаправляет приложения и сборки от использования одной версии параллельной сборки к другой версии той же сборки. Хорошим примером может служить ситуация, когда из-за обнаружения ошибки или проблем безопасности в одной параллельной сборке меняется зависимость, и издатель этой сборки хочет перенаправить все приложения на использование новой версии этой сборки. Файл конфигурации приложения представляет собой XML-файл, который перенаправляет конкретное приложение от использования одной версии параллельной сборки к другой версии той же сборки. Он может использоваться для перенаправления конкретного приложения на использование версии параллельной сборки, отличной от версии, заданной в общем файле конфигурации издателя. Дополнительные сведения см. в разделе Конфигурация.
Библиотеки Visual C++
В Visual C++ 2005 библиотеки ATL, MFC, CRT, OpenMP, MSDIA и стандартная библиотека C++ разворачиваются как совместно используемые параллельные сборки в собственном кэше сборок. По умолчанию в Visual C++ 2005 построение всех приложений выполняется с манифестом, включаемым в конечный двоичный файл; манифест описывает зависимости этого двоичного файла от библиотек Visual C++. Описание создания манифестов для приложений Visual C++ см. в разделе Основные сведения о создании манифестов для программ C/C++
См. также
Другие ресурсы
Построение изолированных приложений и параллельных сборок C/C++