Création de DLL pour les assemblys côte à côte

Lors de la création de vos propres assemblys côte à côte, suivez les instructions pour la création d’assemblys côte à côte et créez les DLL utilisées dans l’assembly en suivant les instructions suivantes :

  • Vos DLL doivent être conçues pour que plusieurs versions puissent s’exécuter en même temps et dans le même processus sans interférer entre elles. Par exemple, de nombreuses applications hébergent plusieurs plug-ins qui nécessitent chacune une version différente d’un composant. Le développeur de l’assembly côte à côte doit concevoir et tester pour s’assurer que plusieurs versions du composant fonctionnent correctement lors de l’exécution en même temps dans le même processus.

  • Si vous envisagez de fournir votre composant en tant que composant partagé sur les systèmes antérieurs à Windows XP, vous devez continuer à installer le composant sur ces systèmes en tant que composant partagé à instance unique. Dans ce cas, vous devez vous assurer que votre composant est rétrocompatible.

  • Évaluez l’utilisation d’objets lorsque plusieurs versions de votre assembly sont exécutées sur le système. Déterminez si différentes versions de l’assembly nécessitent des structures de données distinctes, telles que des fichiers mappés en mémoire, des canaux nommés, des messages et des classes inscrits Windows, une mémoire partagée, des sémaphores, des mutex et des pilotes matériels. Toutes les structures de données utilisées entre les versions d’assembly doivent être compatibles vers l’arrière. Déterminez quelles structures de données peuvent être utilisées entre les versions et quelles structures de données doivent être privées à une version. Déterminez si les structures de données partagées nécessitent des objets de synchronisation distincts, tels que des sémaphores et des mutex.

  • Certains objets, tels que les classes de fenêtre et Atoms, sont nommés de manière unique pour chaque processus. Les objets tels que les classes de fenêtre doivent être versionnés pour chaque assembly à l’aide du manifeste. Pour les objets tels que Atoms, utilisez des identificateurs spécifiques à la version, sauf si vous envisagez de partager entre les versions. Si vous utilisez des identificateurs spécifiques à la version, utilisez le numéro de contrôle de version en quatre parties.

  • N’incluez aucun code d’inscription automatique dans une DLL. Une DLL dans un assembly côte à côte ne peut pas être autoinscription.

  • Définissez tous les noms spécifiques à la version dans votre DLL avec des instructions #define. Cela permet de modifier toutes les clés de Registre à partir d’un emplacement unique. Lorsque vous publiez une nouvelle version de votre assembly, vous devez uniquement modifier cette instruction #define. Par exemple :

    #define MyRegistryKey "MyAssembly1.0.0.0"

  • Stockez toutes les données non performantes dans le répertoire Temp.

  • Ne placez pas les données utilisateur dans des emplacements globaux. Séparez les données d’application des données utilisateur.

  • Affectez à tous les fichiers partagés une version de fichier qui dépend du nom de l’application.

  • Attribuez tous les messages et structures de données utilisés entre les processus d’une version pour empêcher le partage involontaire entre processus.

  • Votre DLL ne doit pas dépendre du partage entre les versions qui peuvent ne pas exister, telles que les sections de mémoire partagée qui ne sont pas partagées entre différentes versions de votre assembly.

  • Si vous ajoutez de nouvelles fonctionnalités qui ne suivent pas le contrat de compatibilité d’interface binaire de la DLL d’origine, vous devez affecter un nouveau CLSID, ProgId et un nouveau nom de fichier. Les versions ultérieures de votre assembly côte à côte sont ensuite requises pour utiliser ce CLSID, ProgId et le nom de fichier. Cela empêche un conflit lorsqu’une version de la DLL qui n’est pas côte à côte est inscrite sur une version côte à côte.

  • Si vous réutilisez le même CLSID ou ProgId, testez pour vous assurer que l’assembly est rétrocompatible.

  • Initialisez et définissez les paramètres par défaut de l’assembly dans le code d’assembly. N’enregistrez pas les paramètres par défaut dans le Registre.

  • Affectez des versions à toutes les structures de données.

  • Votre DLL doit stocker l’état de l’assembly côte à côte, comme décrit dans Authoring State Stockage pour les assemblys côte à côte.