Основные понятия, связанные с изолированными приложениями и параллельными сборками

Приложение называется изолированным , если все его компоненты являются параллельными сборками. Параллельная сборка представляет собой коллекцию ресурсов (группу библиотек DLL, классов окон, серверов COM, библиотек типов или интерфейсов), которые развертываются совместно и могут использоваться приложением во время выполнения. Обычно параллельная сборка — это одна или несколько библиотек DLL.

Совместно используемые и закрытые сборки

Параллельная сборка может быть совместно используемой или закрытой. Совместно используемые параллельные сборки могут использоваться несколькими приложениями, в манифестах которых задана зависимость от такой сборки. Несколько версий параллельной сборки могут совместно использоваться разными приложениями, выполняющимися в одно и то же время. Закрытая сборка — это сборка, которая разворачивается вместе с приложением для использования только этим приложением. Закрытые сборки устанавливаются в папку, содержащую исполняемый файл приложения, или в одну из ее вложенных папок.

Манифесты и порядок поиска

Изолированные приложения и параллельные сборки описываются манифестами. Манифест представляет собой XML-документ, который может быть внешним файлом или ресурсом, встроенным в приложение или сборку. Файл манифеста изолированного приложения используется для управления именами и версиями совместно используемых параллельных сборок, с которыми должно быть связано приложение во время выполнения. Манифест параллельной сборки задает имена, версии, ресурсы и зависимые сборки параллельных сборок. Манифест совместно используемой параллельной сборки устанавливается в папку %WINDIR%\WinSxS\Manifests\. В случае закрытой сборки рекомендуется включить ее манифест в библиотеку DLL в качестве ресурса с идентификатором 1. Можно также присвоить закрытой сборке имя, совпадающее с именем библиотеки DLL. Дополнительные сведения см. в разделе Сведения о закрытых сборках.

Во время выполнения Windows использует данные о сборке из манифеста приложения для поиска и загрузки соответствующей параллельной сборки. Если в изолированном приложении указана зависимость от сборки, то операционная система сначала выполняет поиск сборки среди совместно используемых сборок в собственном кэше сборок в папке %WINDIR%\WinSxS\. Если в этой папке нужная сборка не обнаруживается, то операционная система выполняет поиск закрытой сборки в папке структуры каталога приложения. Дополнительные сведения см. в разделе Порядок поиска сборки.

Изменение зависимостей

Существует возможность изменения зависимостей параллельной сборки после развертывания приложения путем изменения файлов конфигурации издателя и файлов конфигурации приложения. Файл конфигурации издателя, также называемый файлом политики издателя, представляет собой XML-файл, который глобально перенаправляет приложения и сборки от использования одной версии параллельной сборки к другой версии той же сборки. Например, вы могли изменить зависимость при развертывании исправления ошибок или исправления безопасности для параллельной сборки и хотите перенаправить все приложения для использования фиксированной версии. Файл конфигурации приложения представляет собой XML-файл, который перенаправляет конкретное приложение от использования одной версии параллельной сборки к другой версии той же сборки. Можно использовать файл конфигурации приложения для перенаправления конкретного приложения на использование версии параллельной сборки, отличной от версии, заданной в файле конфигурации издателя. Дополнительные сведения см. в статье Конфигурация.

Библиотеки Visual C++

В Visual Studio 2005 и Visual Studio 2008 распространяемые библиотеки, такие как ATL, MFC, CRT, OpenMP, MSDIA и стандартная библиотека C++, разворачивались как совместно используемые параллельные сборки в собственном кэше сборок. В текущей версии для распространяемых библиотек используется центральное развертывание. По умолчанию в Visual Studio сборка всех приложений выполняется с манифестом, включаемым в конечный двоичный файл; этот манифест описывает зависимости этого двоичного файла от библиотек Visual C++. Описание создания манифестов для приложений C++ см. в разделе Основные сведения о создании манифестов для программ на C/C++. Манифест не требуется для приложений, которые статически привязаны к используемым ими библиотекам или используют локальное развертывание. Дополнительные сведения о развертывании см. в разделе Deployment in Visual C++.

См. также

Создание изолированных приложений и параллельных сборок C/C++