Compartir a través de


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 que se usen 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 cada uno requiere 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 de Windows, memoria compartida, semáforos, exclusión mutua 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 exclusión mutua.

  • Algunos objetos, como clases de ventana y Á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. En el caso de 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 auto-registro 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 desde 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 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 que se usan 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 entre diferentes 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. Las versiones futuras del ensamblado en paralelo son necesarias 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 Creación del almacenamiento de estado para ensamblados en paralelo.