Удаление {$ R * .res} в файле package.dpk приведет к удалению rccompile в файле .dproj

Я использую свой собственный файл .rc для создания пользовательских записей ресурсов, включая информацию о версии.

Мой файл library.rc:

#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

Я добавляю файл .rc в файл проекта пакета через Project | Добавить в проект. Мой файл package.dpk пока выглядит примерно так:

package SQL.Alpha.resource.core;

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

В файле package.dproj есть запись RcCompile:

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

Когда я компилирую пакет, все выглядит хорошо, но отображается предупреждение:

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

Это связано с Сам пакет генерирует собственный файл package.res, который включает записи MainIcon и VersionInfo. И VersionInfo конфликтует с моей собственной записью VersionInfo.

Затем я пытаюсь удалить {$ R * .res} в файле dpk:

package SQL.Alpha.resource.core;

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

Перестройте проект, и все работает нормально. Предупреждение исчезло.

Однако есть некоторые побочные эффекты, при удалении {$ R * .res} вручную:

  1. Delphi IDE добавит {$ R *. res} снова, если вы попытаетесь добавить новый модуль в пакет или внести изменения в Project | Параметры ...
  2. Все записи RcCompile в файле .dproj будут удалены

Я могу терпеть первый побочный эффект, снова удалив {$ R * .res} в файле package.dpk.

Однако второй побочный эффект вне моего контроля. Отсутствие RcCompile в package.dproj приведет к тому, что rc-файл не будет снова скомпилирован brcc32. Удаление файлов .res в файловой системе приведет к ошибке компиляции из-за этого.

Есть ли у кого-нибудь идеи, как решить эту проблему? Спасибо.

6
задан Chau Chee Yang 22 March 2011 в 04:48
поделиться