delphi package bpl

delphi - Paquete(BPL) Sufijo automático de nombres



package (3)

AFAIK para Delphi hasta XE2 no hay automatismo para hacer esto.

Con respecto a la cláusula de requisitos : cuando require otro paquete, en realidad está utilizando el dcp , que no hereda el LIBSUFFIX. Por lo tanto, es suficiente para requerir VCL.dcp durante el tiempo de compilación, mientras que VCL160.bpl se usa realmente durante el tiempo de ejecución. El DCP incluye el nombre completo de BPL para resolverlo.

Esto hace que el enfoque LIBSUFFIX sea superior al simple "renombrar el paquete para cada versión de Delphi".

Una solución como la sugerida en qc.embarcadero.com/wc/qcmain.aspx?d=83229 haría más fácil portar un paquete a una versión más nueva de Delphi, pero aún así se queda atascado con los archivos dproj que no son compatibles con versiones anteriores.

Normalmente uso carpetas diferentes para cada versión de Delphi, donde solo se almacenan los archivos del proyecto. Para una nueva versión de Delphi solo tengo que copiar una carpeta y cambiar el LIBSUFFIX.

Escribo muchos componentes y bibliotecas para Delphi, la mayoría de los cuales requieren el uso de BPL Packaging para que puedan instalarse en el IDE.

Esto es bastante simple y funciona bien, hasta que quiera mantener un solo conjunto de Archivos de Proyecto de Paquete (en un solo Grupo de Proyecto), pero también desea compilar y distribuir esos mismos paquetes para diferentes versiones de Delphi.

Hasta ahora he estado creando un Proyecto de Paquete diferente para cada versión de Delphi, y definiendo explícitamente un Identificador de Versión de Delphi como un sufijo (por ejemplo, Kinect_XE.bpl y Kinect_XE2.bpl ).

Soy consciente de que, en Opciones de proyecto para un proyecto de paquete, en Descripción , hay los campos de prefijo LIB y (lo que es más importante para mis necesidades) el sufijo LIB .

Soy más consciente de que si coloco un valor en el sufijo LIB , se agregará al final del nombre de archivo de BPL compilado.

Mi pregunta, sin embargo, es primero si es posible que el IDE rellene automáticamente el campo del sufijo LIB con el número de la versión IDE / RTL , y si es así, ¿cómo?

Estoy bastante seguro de que esto es posible, ya que parece que vcl120.bpl ( y sus equivalentes para cada versión respectiva de Delphi ) pueden ser referenciados (como requisitos) de sus propios paquetes usando solo vcl en lugar de tener que escribir el vcl120 completo . Es, de hecho, este mismo comportamiento que espero lograr ... donde mis paquetes puedan hacer referencia entre ellos (según sea necesario) sin tener que proporcionar referencias específicas de la versión para acomodar los sufijos.

Igualmente importante es que resolver esto me permitirá mantener un solo conjunto de Archivos de Proyecto en un solo Grupo de Proyecto (con la obvia excepción de XE2 donde sus Archivos de Proyecto no necesariamente se comportan muy bien con versiones anteriores de Delphi debido a la adición de Plataformas ).

Sospecho que es posible que deba poner un valor como $ (VER) (o algo similar) en el campo del sufijo LIB , pero parece que esto no funciona y he buscado en Google buscando la solución correcta.

Espero que puedas ayudar!

ACTUALIZACIÓN 1

Ahora estoy escribiendo un complemento IDE para ser usado con ( como mínimo ) Delphi 2007 a XE2, que le da a los proyectos de DLL y BPL una nueva opción llamada AutoSuffix . Cuando se activa, cualquier IDE con el complemento AutoSuffix instalado aplicará de inmediato el sufijo de la versión IDE correcta al proyecto.

El complemento AutoSuffix estará disponible (libremente) para todos en las próximas 24 horas, y esta pregunta se actualizará en consecuencia.

ACTUALIZACIÓN 2

De acuerdo ... ¡Delphi 2007 es un dolor! He hecho que AutoSuffix funcione con 2009 a XE2, hasta ahora, pero 2007 requiere un poco más de tiempo (se agradece la paciencia).

ACTUALIZACIÓN 3

Parecería que Embarcadero ha escuchado nuestro clamor colectivo por una unificación de paquetes más simple entre versiones.

Mark lo enviará para ver si las versiones futuras de Delphi pueden acomodar una característica de {$ LIBSUFFIX AUTO} . Espero escuchar muy pronto si este será el caso. Si es así, ciertamente afecta la forma en que AutoSuffix necesitará trabajar en XE2 y versiones anteriores (ya que actualmente no proporciona el simple interruptor AUTO ... tiene su propio método).

¡Mi esperanza ahora es que EMB se tome en serio esta solicitud, la proporcione como una característica integral en el futuro, de modo que se convierta en un caso simple de usar AutoSuffix en versiones existentes para unificar el proceso en todas las versiones!


Mi sugerencia sería agregar esto como una opción configurable para proyectar conjuntos de opciones (ver QC # 86491 ). En lugar de actualizar todos los paquetes, sería suficiente actualizar un solo archivo de conjunto de opciones.

De hecho, parece que la etiqueta DllSuffix es reconocida por los archivos de opciones en Delphi XE / XE2. Agregar <DllSuffix>160</DllSuffix> a la sección <PropertyGroup> de un archivo de conjunto de opciones hará que el sufijo se agregue al paquete en el administrador del proyecto. Sin embargo, aún tiene que abrir las opciones del proyecto y hacer clic en Aceptar para que se guarde en el archivo .dpk.

Estoy de acuerdo en que sería extremadamente útil con esta característica (creo que también para los paquetes en la RTL).


LIBSUFFIX directiva LIBSUFFIX está en el archivo * .dpk, y puede editar el archivo * .dpk manualmente.

Puedes escribir, por ejemplo

{$IFDEF CONDITIONALEXPRESSIONS} {$IF CompilerVersion = 20.0} {$LIBSUFFIX ''120''} {$IFEND} {$IF CompilerVersion = 21.0} {$LIBSUFFIX ''140''} {$IFEND} {$ENDIF}

Lo malo es que IDE no respeta las ediciones manuales del archivo * .dpk y las elimina, luego realiza cambios en un paquete. Es por eso que algunos proveedores de componentes que usan definiciones condicionales en el archivo * .dpk dicen en las instrucciones de instalación, si se les pide que guarden los cambios, diga "NO".