Criação de DLLs para assemblies lado a lado
Ao criar seus próprios assemblies lado a lado, siga as Diretrizes para criar assemblies lado a lado e crie quaisquer DLLs usadas no assembly de acordo com as seguintes diretrizes:
Suas DLLs devem ser projetadas para que várias versões possam ser executadas ao mesmo tempo e no mesmo processo sem interferir umas nas outras. Por exemplo, muitos aplicativos hospedam vários plug-ins que exigem uma versão diferente de um componente. O desenvolvedor do assembly lado a lado precisa projetar e testar para garantir que várias versões do componente funcionem corretamente quando executadas ao mesmo tempo no mesmo processo.
Se você planeja fornecer seu componente como um componente compartilhado em sistemas anteriores ao Windows XP, precisará continuar instalando o componente nesses sistemas como um componente compartilhado de instância única. Nesse caso, você precisa garantir que o componente seja compatível com versões anteriores.
Avalie o uso de objetos quando mais de uma versão do assembly for executada no sistema. Determine se diferentes versões do assembly exigem estruturas de dados separadas, como arquivos mapeados em memória, pipes nomeados, mensagens e classes registradas do Windows, memória compartilhada, semáforos, mutexes e drivers de hardware. Todas as estruturas de dados usadas em versões de assembly devem ser compatíveis com versões anteriores. Decida quais estruturas de dados podem ser usadas entre versões e quais estruturas de dados devem ser privadas para uma versão. Determine se as estruturas de dados compartilhados exigem objetos de sincronização separados, como semáforos e mutexes.
Alguns objetos, como classes de janela e Atoms, são nomeados exclusivamente para cada processo. Objetos como classes de janela devem ser versão para cada assembly usando o manifesto. Para objetos como Atoms, use identificadores específicos da versão, a menos que você planeje compartilhar entre versões. Se você usar identificadores específicos da versão, use o número de controle de versão de quatro partes.
Não inclua nenhum código de auto-registro em nenhuma DLL. Uma DLL em um assembly lado a lado não pode ser auto-registrado.
Defina todos os nomes específicos da versão em sua DLL com instruções #define. Isso permite que todas as chaves do Registro sejam alteradas de um local. Quando você lança uma nova versão do assembly, só precisa alterar essa instrução #define. Por exemplo:
#define MyRegistryKey "MyAssembly1.0.0.0"
Armazene todos os dados não persistentes no diretório Temp.
Não coloque dados de usuário em locais globais. Mantenha os dados do aplicativo separados dos dados do usuário.
Atribua a todos os arquivos compartilhados uma versão de arquivo que depende do nome do aplicativo.
Atribua todas as mensagens e estruturas de dados usadas em processos de uma versão para evitar o compartilhamento cruzado não intencional.
Sua DLL não deve depender do compartilhamento entre versões que podem não existir, como seções de memória compartilhada que não são compartilhadas em diferentes versões do assembly.
Se você adicionar uma nova funcionalidade que não segue o contrato de compatibilidade de interface binária da DLL original, deverá atribuir um novo CLSID, ProgId e nome de arquivo. As versões futuras do assembly lado a lado são necessárias para usar esse CLSID, ProgId e nome de arquivo. Isso evita um conflito quando uma versão da DLL que não está lado a lado é registrada em uma versão lado a lado.
Se você reutilizar o mesmo CLSID ou ProgId, teste para garantir que o assembly seja compatível com versões anteriores.
Inicialize e defina as configurações padrão para o assembly no código do assembly. Não salve as configurações padrão no Registro.
Atribua versões a todas as estruturas de dados.
Sua DLL deve armazenar o estado do assembly lado a lado, conforme descrito em Criação de armazenamento de estado para assemblies lado a lado.