Creazione di DLL per assembly side-by-side

Quando si creano assembly side-by-side personalizzati, seguire le linee guida per la creazione di assembly side-by-side e creare eventuali DLL usate nell'assembly in base alle linee guida seguenti:

  • Le DLL devono essere progettate in modo che più versioni possano essere eseguite contemporaneamente e nello stesso processo senza interferire tra loro. Ad esempio, molte applicazioni ospitano più plug-in che richiedono una versione diversa di un componente. Lo sviluppatore dell'assembly side-by-side deve progettare e testare per garantire che più versioni del componente funzionino correttamente quando vengono eseguite contemporaneamente nello stesso processo.

  • Se si prevede di fornire il componente come componente condiviso nei sistemi precedenti a Windows XP, è necessario continuare a installare il componente in questi sistemi come componente condiviso a istanza singola. In questo caso, è necessario assicurarsi che il componente sia compatibile con le versioni precedenti.

  • Valutare l'uso di oggetti quando nel sistema vengono eseguite più versioni dell'assembly. Determinare se versioni diverse dell'assembly richiedono strutture di dati separate, ad esempio file mappati alla memoria, named pipe, messaggi e classi di Windows registrati, memoria condivisa, semafori, mutex e driver hardware. Tutte le strutture di dati usate nelle versioni degli assembly devono essere compatibili con le versioni precedenti. Decidere quali strutture di dati possono essere usate tra le versioni e quali strutture di dati devono essere private per una versione. Determinare se le strutture di dati condivise richiedono oggetti di sincronizzazione separati, ad esempio semafori e mutex.

  • Alcuni oggetti, ad esempio classi finestra e Atom, sono denominati in modo univoco per ogni processo. Gli oggetti, ad esempio le classi finestra, devono essere con controllo delle versioni per ogni assembly usando il manifesto. Per oggetti come Atom, usare identificatori specifici della versione, a meno che non si prevede di condividere tra le versioni. Se si usano identificatori specifici della versione, usare il numero di controllo delle versioni in quattro parti.

  • Non includere codice autoregistrato in alcuna DLL. Una DLL in un assembly side-by-side non può essere autoregistrazione.

  • Definire tutti i nomi specifici della versione nella DLL con istruzioni #define. In questo modo tutte le chiavi del Registro di sistema possono essere modificate da un'unica posizione. Quando si rilascia una nuova versione dell'assembly, è sufficiente modificare questa istruzione #define. Ad esempio:

    #define MyRegistryKey "MyAssembly1.0.0.0"

  • Archiviare tutti i dati non permanenti nella directory Temp.

  • Non inserire i dati utente in posizioni globali. Mantenere separati i dati dell'applicazione dai dati utente.

  • Assegnare tutti i file condivisi una versione del file che dipende dal nome dell'applicazione.

  • Assegnare tutti i messaggi e le strutture di dati usati nei processi di una versione per impedire la condivisione tra processi non intenzionali.

  • La DLL non deve dipendere dalla condivisione tra versioni che potrebbero non esistere, ad esempio sezioni di memoria condivisa non condivise tra versioni diverse dell'assembly.

  • Se si aggiungono nuove funzionalità che non seguono il contratto di compatibilità dell'interfaccia binaria della DLL originale, è necessario assegnare un nuovo CLSID, ProgId e nome file. Le versioni future dell'assembly side-by-side sono quindi necessarie per usare questo CLSID, ProgId e il nome del file. Ciò impedisce un conflitto quando una versione della DLL non side-by-side viene registrata su una versione side-by-side.

  • Se si riutilizza lo stesso CLSID o ProgId, verificare che l'assembly sia compatibile con le versioni precedenti.

  • Inizializzare e impostare le impostazioni predefinite per l'assembly nel codice assembly. Non salvare le impostazioni predefinite nel Registro di sistema.

  • Assegnare versioni a tutte le strutture di dati.

  • La DLL deve archiviare lo stato dell'assembly side-by-side, come descritto in Creazione dell'archiviazione stato per assembly side-by-side.