Génération d'assemblys côte à côte C/C++Building C/C++ Side-by-side Assemblies

Un assembly côte à côte est une collection de ressources (un groupe de dll, de classes Windows, de serveurs com, de bibliothèques de types ou d’interfaces) disponible pour une application à utiliser au moment de l’exécution.A side-by-side assembly is a collection of resources—a group of DLLs, windows classes, COM servers, type libraries, or interfaces—available for an application to use at runtime. Le principal avantage du reconditionnement des dll dans les assemblys est que plusieurs versions d’assemblys peuvent être utilisées par les applications en même temps et qu’il est possible de traiter les assemblys actuellement installés dans le cas d’une version de mise à jour.The primary advantage of repackaging DLLs in assemblies is that multiple versions of assemblies can be used by applications at the same time and it is possible to service currently installed assemblies in case of an update release.

Une C++ application peut utiliser une ou plusieurs dll dans différentes parties de l’application.A C++ application may use one or several DLLs in different parts of the application. Au moment de l’exécution, les dll sont chargées dans le processus principal et le code requis est exécuté.At runtime, the DLLs are loaded into the main process and the required code is executed. L’application s’appuie sur le système d’exploitation pour localiser les dll demandées, comprendre ce que les autres dll dépendantes doivent être chargées, puis les charger avec la DLL demandée.The application relies on the operating system to locate the requested DLLs, understand what other dependent DLLs have to be loaded and then load them together with the requested DLL. Sur les versions des systèmes d’exploitation Windows antérieures à Windows XP, Windows Server 2003 et Windows Vista, le chargeur du système d’exploitation recherche les dll dépendantes dans le dossier local de l’application ou dans un autre dossier spécifié sur le chemin d’accès système.On Windows operating systems versions earlier than Windows XP, Windows Server 2003, and Windows Vista, the operating system loader searches for dependent DLLs in either the application's local folder or another folder specified on the system path. Sur Windows XP, Windows Server 2003 et Windows Vista, le chargeur du système d’exploitation peut également rechercher des dll dépendantes à l’aide d’un fichier manifeste et rechercher les assemblys côte à côte qui contiennent ces dll.On Windows XP, Windows Server 2003, and Windows Vista, the operating system loader can also search for dependent DLLs using a manifest file and search for side-by-side assemblies that contain these DLLs.

Par défaut, lorsqu’une DLL est générée avec Visual Studio, un manifeste d' application est incorporé en tant que ressource RT_MANIFEST avec l’ID égal à 2.By default, when a DLL is built with Visual Studio, it has an application manifest embedded as an RT_MANIFEST resource with ID equal to 2. Tout comme pour un fichier exécutable, ce manifeste décrit les dépendances de cette DLL sur d’autres assemblys.Just as for an executable, this manifest describes dependencies of this DLL on other assemblies. Cela suppose que la DLL ne fait pas partie d’un assembly côte à côte et que les applications qui dépendent de cette DLL ne vont pas utiliser un manifeste d’application pour le charger, mais qu’elle s’appuie plutôt sur le chargeur du système d’exploitation pour trouver cette DLL sur le chemin d’accès système.This assumes that the DLL is not part of a side-by-side assembly and applications that depend on this DLL are not going to use an application manifest to load it, but instead rely on the operating system loader to find this DLL on the system path.

Notes

Il est important pour une DLL qui utilise un manifeste d’application de faire en sorte que le manifeste soit incorporé en tant que ressource dont l’ID est égal à 2.It is important for a DLL that uses an application manifest to have the manifest embedded as a resource with ID equal to 2. Si la DLL est chargée dynamiquement au moment de l’exécution (par exemple, à l’aide de la fonction LoadLibrary ), le chargeur du système d’exploitation charge les assemblys dépendants spécifiés dans le manifeste de la dll.If the DLL is dynamically loaded at runtime (for example, using the LoadLibrary function), the operating system loader loads dependent assemblies specified in the DLL's manifest. Un manifeste d’application externe pour les dll n’est pas LoadLibrary vérifié pendant un appel.An external application manifest for DLLs is not checked during a LoadLibrary call. Si le manifeste n’est pas incorporé, le chargeur peut tenter de charger des versions incorrectes des assemblys ou ne parvient pas à trouver les assemblys dépendants.If the manifest is not embedded, the loader may attempt to load incorrect versions of assemblies or fail to find to find dependent assemblies.

Une ou plusieurs dll associées peuvent être reconditionnées dans un assembly côte à côte avec un manifeste d' assemblycorrespondant, qui décrit les fichiers de l’assembly ainsi que la dépendance de l’assembly par rapport à d’autres assemblys côte à côte.One or several related DLLs can be repackaged into a side-by-side assembly with a corresponding assembly manifest, which describes which files form the assembly as well as the dependence of the assembly on other side-by-side assemblies.

Notes

Si un assembly contient une DLL, il est recommandé d’incorporer le manifeste de l’assembly dans cette DLL en tant que ressource dont l’ID est égal à 1, et d’attribuer à l’assembly privé le même nom que la DLL.If an assembly contains one DLL, it is recommended to embed the assembly manifest into this DLL as a resource with ID equal to 1, and give the private assembly the same name as the DLL. Par exemple, si le nom de la dll est MyLibrary. dll, la valeur de l’attribut Name utilisé dans l' <élément assemblyIdentity > du manifeste peut également être MyLibrary.For example, if the name of the DLL is mylibrary.dll, the value of the name attribute used in the <assemblyIdentity> element of the manifest may also be mylibrary. Dans certains cas, lorsqu’une bibliothèque a une extension autre que. dll (par exemple, un projet de contrôles ActiveX MFC crée une bibliothèque. ocx), vous pouvez créer un manifeste d’assembly externe.In some cases, when a library has an extension other than .dll (for example, an MFC ActiveX Controls project creates an .ocx library) an external assembly manifest can be created. Dans ce cas, le nom de l’assembly et son manifeste doivent être différents du nom de la DLL (par exemple, MyAssembly, MyAssembly. manifest et MyLibrary. ocx).In this case, the name of the assembly and its manifest must be different than the name of the DLL (for example, MyAssembly, MyAssembly.manifest, and mylibrary.ocx). Toutefois, il est toujours recommandé de renommer ces bibliothèques avec l’extension. dll et d’incorporer le manifeste en tant que ressource pour réduire le coût de maintenance futur de cet assembly.However it is still recommended to rename such libraries to have the extension.dll and embed the manifest as a resource to reduce the future maintenance cost of this assembly. Pour plus d’informations sur la recherche d’assemblys privés dans le système d’exploitation, consultez séquence de recherched’assemblys.For more information about how the operating system searches for private assemblies, see Assembly Searching Sequence.

Cette modification peut permettre le déploiement des DLL correspondantes en tant qu' assembly privé dans un dossier local de l’application ou en tant qu' assembly partagé dans le cache de l’assembly WinSxS.This change may allow deployment of corresponding DLLs as a private assembly in an application local folder or as a shared assembly in the WinSxS assembly cache. Vous devez suivre plusieurs étapes pour obtenir le comportement d’exécution correct de ce nouvel assembly. elles sont décrites dans indications pour la création d’assemblys côte à côte.Several steps have to be followed in order to achieve correct runtime behavior of this new assembly; they are described in Guidelines for Creating Side-by-side Assemblies. Une fois qu’un assembly est correctement créé, il peut être déployé en tant qu’assembly partagé ou privé avec une application qui en dépend.After an assembly is correctly authored it can deployed as either a shared or private assembly together with an application that depends on it. Lors de l’installation d’assemblys côte à côte en tant qu’assembly partagé, vous pouvez suivre les instructions fournies dans installation d’assemblys Win32 pour le partage côte à côte sur Windows XP ou utiliser des modules de fusion.When installing side-by-side assemblies as a shared assembly, you may either follow the guidelines outlined in Installing Win32 Assemblies for Side-by-Side Sharing on Windows XP or use merge modules. Lors de l’installation d’assemblys côte à côte en tant qu’assembly privé, vous pouvez simplement copier la DLL, les ressources et le manifeste de l’assembly correspondants dans le cadre du processus d’installation dans le dossier local de l’application sur l’ordinateur cible, ce qui garantit que cet assembly peut être trouvé par le chargeur lors de l’exécution (voir séquence de recherched’assembly).When installing side-by-side assemblies as a private assembly, you may just copy the corresponding DLL, resources and assembly manifest as part of the installation process to the application local folder on the target computer, ensuring that this assembly can be found by the loader at runtime (see Assembly Searching Sequence). Une autre méthode consiste à utiliser Windows Installer et à suivre les instructions fournies dans installation d’assemblys Win32 pour l’utilisation privée d’une application sur Windows XP.Another way is to use Windows Installer and follow the guidelines outlined in Installing Win32 Assemblies for the Private Use of an Application on Windows XP.

Voir aussiSee also

Génération d’applications isolées C/C++Building C/C++ Isolated Applications
Génération d’applications isolées et d’assemblys côte à côte C/C++Building C/C++ Isolated Applications and Side-by-side Assemblies