Построение параллельных сборок C/C++
Обновлен: Ноябрь 2007
Параллельная сборка представляет собой коллекцию ресурсов (группу библиотек DLL, классов окон, серверов COM, библиотек типов или интерфейсов), которые могут использоваться приложением во время выполнения. В Visual C++ 2005 библиотеки ATL, MFC, CRT и стандартные библиотеки C++ упакованы в несколько параллельных сборок, которые могут распространяться с приложением Visual C++ в качестве общих или закрытых сборок. Дополнительные сведения см. в разделе Visual C++ Libraries as Shared Side-by-Side Assemblies. Основное преимущество упаковки библиотек 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 2005манифест приложения встраивается в нее в качестве ресурса 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++