Creación de archivos DLL para ensamblados en paralelo

Al crear sus propios ensamblados en paralelo, siga las directrices para crear ensamblados en paralelo y cree los archivos DLL usados en el ensamblado según las siguientes directrices:

  • Los archivos DLL deben diseñarse para que varias versiones se puedan ejecutar al mismo tiempo y en el mismo proceso sin interferir entre sí. Por ejemplo, muchas aplicaciones hospedan varios complementos que requieren una versión diferente de un componente. El desarrollador del ensamblado en paralelo debe diseñar y probar para asegurarse de que varias versiones del componente funcionan correctamente cuando se ejecutan al mismo tiempo en el mismo proceso.

  • Si tiene previsto proporcionar el componente como un componente compartido en sistemas anteriores a Windows XP, debe seguir instalando el componente en estos sistemas como un componente compartido de instancia única. En este caso, debe asegurarse de que el componente es compatible con versiones anteriores.

  • Evalúe el uso de objetos cuando se ejecuta más de una versión del ensamblado en el sistema. Determine si diferentes versiones del ensamblado requieren estructuras de datos independientes, como archivos asignados a memoria, canalizaciones con nombre, mensajes y clases registrados Windows, memoria compartida, semáforos, exclusiones mutuas y controladores de hardware. Las estructuras de datos usadas en las versiones de ensamblado deben ser compatibles con versiones anteriores. Decida qué estructuras de datos se pueden usar entre versiones y qué estructuras de datos deben ser privadas para una versión. Determine si las estructuras de datos compartidas requieren objetos de sincronización independientes, como semáforos y exclusiones mutuas.

  • Algunos objetos, como las clases de ventana y Los átomos, se denominan de forma única para cada proceso. Los objetos como las clases de ventana deben tener versiones para cada ensamblado mediante el manifiesto. Para objetos como Atom, use identificadores específicos de la versión a menos que planee compartir entre versiones. Si usa identificadores específicos de la versión, use el número de control de versiones de cuatro partes.

  • No incluya ningún código de registro por sí mismo en ningún archivo DLL. Un archivo DLL en un ensamblado en paralelo no puede registrarse automáticamente.

  • Defina todos los nombres específicos de la versión en el archivo DLL con instrucciones #define. Esto permite cambiar todas las claves del Registro de una ubicación. Al publicar una nueva versión del ensamblado, solo tiene que cambiar esta instrucción #define. Por ejemplo:

    #define MyRegistryKey "MyAssembly1.0.0.0"

  • Almacene los datos no persistentes en el directorio Temp.

  • No coloque los datos de usuario en ubicaciones globales. Mantenga los datos de la aplicación separados de los datos de usuario.

  • Asigne todos los archivos compartidos una versión de archivo que dependa del nombre de la aplicación.

  • Asigne todos los mensajes y estructuras de datos utilizados en los procesos de una versión para evitar el uso compartido accidental entre procesos.

  • El archivo DLL no debe depender del uso compartido entre versiones que pueden no existir, como secciones de memoria compartida que no se comparten en distintas versiones del ensamblado.

  • Si agrega una nueva funcionalidad que no sigue el contrato de compatibilidad de la interfaz binaria del archivo DLL original, debe asignar un nuevo CLSID, ProgId y nombre de archivo. A continuación, se necesitan versiones futuras del ensamblado en paralelo para usar este CLSID, ProgId y el nombre de archivo. Esto evita un conflicto cuando se registra una versión del archivo DLL que no está en paralelo en una versión en paralelo.

  • Si reutiliza el mismo CLSID o ProgId, pruebe para asegurarse de que el ensamblado es compatible con versiones anteriores.

  • Inicialice y establezca la configuración predeterminada para el ensamblado en el código del ensamblado. No guarde la configuración predeterminada en el Registro.

  • Asigne versiones a todas las estructuras de datos.

  • El archivo DLL debe almacenar el estado del ensamblado en paralelo, tal y como se describe en Authoring State Storage for Side-by-Side Assemblies ( Estado de creación para ensamblados en paralelo).