2011-03-22 18 views
6

Utilizo mi propio archivo .rc para generar entradas de recursos personalizados, incluida la información de la versión.

Mi archivo library.rc es:

#include "app.rc.h" 
VS_VERSION_INFO VERSIONINFO 
FILEVERSION _FileVersion 
PRODUCTVERSION _FileVersion 
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK 
FILEFLAGS 0 
FILEOS VOS__WINDOWS32 
FILETYPE VFT_APP 
FILESUBTYPE VFT2_UNKNOWN 
BEGIN 
    BLOCK "VarFileInfo" 
    BEGIN 
    VALUE "Translation", 0x0409, 1252 
    END 
    BLOCK "StringFileInfo" 
    BEGIN 
    BLOCK "040904E4" 
    BEGIN 
     VALUE "InternalName",  App_InternalName "\0" 
     VALUE "CompanyName",  App_CompanyName "\0" 
     VALUE "FileDescription", App_ProductName "\0" 
     VALUE "FileVersion",  _FileVersionStr "\0" 
     VALUE "ProductName",  App_ProductName "\0" 
     VALUE "ProductEdition",  App_ProductEdition "\0" 
     VALUE "LegalCopyright",  "Copyright \251 " App_CompanyName "\0" 
     VALUE "CompanyURL",   App_CompanyURL "\0" 
     VALUE "ProductURL",   App_ProductURL "\0" 
     VALUE "SupportURL",   App_SupportURL "\0" 
     VALUE "AppRegistryPath", App_RegistryPath "\0" 
    END 
    END 
END 

agrego el archivo .rc en el archivo de proyecto de paquete a través del Proyecto | Agregar al proyecto Mi archivo package.dpk es algo como esto hasta ahora:

package SQL.Alpha.resource.core; 

{$R *.res} 
{$R 'library.res'} 
{$ALIGN 8} 

El archivo package.dproj tiene RcCompile entrada:

<RcCompile Include="..\..\build\rc\library.rc"> 
    <Form>library.res</Form> 
</RcCompile> 

Cuando puedo compilar el paquete, todo se ve bien, pero tiene una advertencia:

[DCC Warning] W1056 Warning: Duplicate resource: Type 16 (VERSIONINFO), ID 1; File library.res resource kept; file package.res resource discarded. 

Esto se debe al propio envase es generar archivos propios package.res que incluyen entradas y MainIcon versionInfo. Y el VersionInfo tiene un conflicto con mi propia entrada VersionInfo.

Entonces intente extraer {$ R * .res} en el archivo dpk:

package SQL.Alpha.resource.core; 

{$R 'library.res'} 
{$ALIGN 8} 

generar el proyecto y todo funciona bien. La advertencia se ha ido.

Sin embargo, hay algunos efectos secundarios eliminando {$ R * .res} manualmente:

  1. Delphi IDE agregará el {$ R * .res} de nuevo si intenta agregar nueva unidad en el paquete o hacer y cambios en Project | Opciones ...
  2. entradas Todo RcCompile en .dproj archivos serán eliminados

puedo tolerar con el primer efecto secundario mediante la eliminación de {$ R * .res} de nuevo en el archivo package.dpk.

Sin embargo, el segundo efecto secundario está fuera de mi control. La falta de RcCompile en package.dproj hará que el archivo rc no sea compilado nuevamente por brcc32. La eliminación de los archivos .res en el sistema de archivos provocará un error en la compilación debido a esto.

¿Alguien tiene ideas para superar este problema? Gracias.

Respuesta

5

En Delphi XE2, ahora puede eliminar la información de versión incorporada del paquete Delphi (* .bpl) a través de Project | Opciones. Vaya al paquete "Información de la versión" y desmarque "Incluir información de la versión en el proyecto".

Al hacer esto, la información de versión incorporada no se generará en archivos * .res y, por lo tanto, no se mostrará el mensaje de advertencia del compilador. Puede usar sus archivos * .rc personalizados como lo desee.

1

Tuve problemas para hacer que esto funcione y finalmente recurrí al uso de eventos de compilación. Sería bueno incluir el archivo rc directamente. Pero si usted no recibe una respuesta diferente que funciona puede agregar esto a su evento Pre-Construcción:

brcc32 "$ (projectdir) \ version.rc"

A continuación, sólo incluyen el archivo de recursos de archivos compilados con {$ R version.res}. No necesita agregar el archivo .rc al proyecto.

Para el conflicto VersionInfo, consulte la opción del proyecto para obtener información sobre la versión. Hay una casilla de verificación en la parte superior para la información de "Incluir versión". Si desmarcas eso, puedes dejar el {$ R * .res} en su lugar sin conflicto.

+0

Tengo más de 200 proyectos de paquetes de tiempo de ejecución en un grupo de proyectos. Es tedioso crear un evento de preconstrucción y creo que esta es solo una solución alternativa. Para su información, no podemos desmarcar los proyectos de VersionInfo para paquetes (.dpk). Solo está disponible para el proyecto de aplicación (.exe). –

Cuestiones relacionadas