Поделиться через


Построение параллельных сборок C/C++

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

В различных частях приложения Visual C++ могут использоваться одна или несколько библиотек DLL.Во время выполнения библиотеки DLL загружаются в основной процесс, после чего выполняется требуемый код.На основании сведений, полученных от операционной системы, в приложении выполняется поиск запрашиваемых и зависимых от них библиотек DLL, после чего выполняется их совместная загрузка.В операционных системах Windows версий, предшествующих Windows XP, Windows Server 2003 и Windows Vista, поиск зависимых библиотек DLL осуществляется загрузчиком системы в локальной папке приложения или другой указанной папке в системном каталоге.В Windows XP, Windows Server 2003 и Windows Vista может выполняться поиск зависимых библиотек DLL с использованием файла манифеста, а также поиск параллельных сборок, в которых содержатся эти библиотеки DLL.

По умолчанию при построении библиотеки DLL в Visual Studio манифест приложения встраивается в нее в качестве ресурса RT_MANIFEST с идентификатором 2.Как и для исполняемого файла, в этом манифесте описываются зависимости указанной библиотеки DLL от других сборок.Это предполагает, что данная библиотека DLL не входит в состав параллельной сборки, а в приложениях, зависимых от нее, для ее загрузки не используется манифест приложения. Вместо этого поиск данной библиотеки DLL осуществляется загрузчиком операционной системы в системном каталоге.

ПримечаниеПримечание

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

Одну или несколько связанных библиотек DLL можно упаковать в параллельную сборку с соответствующим манифестом сборки. В этом манифесте описываются файлы, на основе которых строится сборка, а также зависимости сборки от других параллельных сборок.

ПримечаниеПримечание

Если в сборке содержится одна библиотека DLL, рекомендуется внедрять манифест приложения в эту библиотеку в качестве ресурса с идентификатором 1. В этом случае закрытой сборке следует присвоить то же имя, что и библиотеке DLL.Например, в элементе <assemblyIdentity> манифеста библиотеки mylibrary.dll можно использовать значение атрибута имени mylibrary.В некоторых случаях для библиотек с отличным от DLL расширением (например для библиотек OCX, создаваемых в проектах элементов управления ActiveX библиотеки MFC) можно создать внешний манифест приложения.В этом случае имена сборки и соответствующего манифеста должны отличаться от имени библиотеки DLL (например MyAssembly, MyAssembly.manifest и mylibrary.ocx).Однако чтобы снизить последующие расходы на обслуживание сборки, рекомендуется присваивать таким библиотекам расширение DLL и внедрять манифест в качестве ресурса.Дополнительные сведения о порядке поиска закрытых сборок в операционной системе см. в разделе Последовательность поиска сборок.

Такое изменение позволит развертывать соответствующие библиотеки DLL в качестве закрытых сборок в локальной папке приложения или в качестве общих сборок в кэше сборок WinSxS.Сведения о действиях, которые следует выполнить, чтобы обеспечить требуемое поведение новой сборки во время выполнения, см. в разделе Рекомендации по созданию параллельных сборок.После проверки правильности работы сборки можно развернуть ее в качестве общей или закрытой сборки совместно с приложением, в котором она используется.При установке параллельных сборок в качестве общей сборки следуйте рекомендациям, приведенным в разделе Установка параллельных сборок Win32 для общего использования в Windows XP или используйте модули слияния.Для установки параллельных сборок в качестве закрытой сборки достаточно в процессе установки скопировать соответствующие ресурсы, библиотеку DLL и манифест приложения в локальную папку приложения на конечном компьютере. В этом случае гарантируется обнаружение сборки загрузчиком во время выполнения (см. раздел Последовательность поиска сборок).Также можно использовать установщик Windows или выполнить действия, описанные в разделе Установка сборок Win32 для закрытого использования в приложении в Windows XP.

См. также

Основные понятия

Примеры развертывания

Построение изолированных приложений C/C++

Другие ресурсы

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