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

Lorsque vous créez 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 conformément aux instructions suivantes :

  • Vos DLL doivent être conçues de sorte 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 chacun 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 lorsqu’elles sont exécutées en même temps dans le même processus.

  • Si vous envisagez de fournir votre composant en tant que composant partagé sur des 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 Windows inscrits, de la mémoire partagée, des sémaphores, des mutexes et des pilotes matériels. Toutes les structures de données utilisées entre les versions d’assembly doivent être rétrocompatibles. Déterminez quelles structures de données peuvent être utilisées entre les versions et quelles structures de données doivent être privées d’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 des objets tels que Atoms, utilisez des identificateurs spécifiques aux versions, 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 inscrite automatiquement.

  • Définissez tous les noms spécifiques aux versions de 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, il vous suffit de modifier cette instruction #define. Par exemple :

    #define MyRegistryKey "MyAssembly1.0.0.0"

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

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

  • Attribuez à 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 les processus.

  • Votre DLL ne doit pas dépendre du partage entre des versions qui n’existent peut-être pas, telles que des 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é de l’interface binaire de la DLL d’origine, vous devez attribuer un nouveau CLSID, ProgId et nom de fichier. Les versions ultérieures de votre assembly côte à côte sont ensuite requises pour utiliser ce CLSID, ce ProgId et ce 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 de l’assembly. N’enregistrez pas les paramètres par défaut dans le Registre.

  • Attribuez 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 Stockage d’état de création pour les assemblys côte à côte.