Remove {$ R * .res} в файле package.dpk удалит компилятор rc в файле .dproj - PullRequest
6 голосов
/ 22 марта 2011

Я использую свой собственный файл .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 в пакетфайл проекта через проект |Добавить в проект.Мой файл 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файл.

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

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

Ответы [ 2 ]

5 голосов
/ 24 сентября 2011

В Delphi XE2 вы можете теперь удалить информацию о встроенной версии пакета Delphi (* .bpl) через Project | Опции. Перейдите к пакету «Информация о версии» и снимите флажок «Включить информацию о версии в проект».

При этом встроенная информация о версии не будет генерироваться в файлах * .res, и, следовательно, предупреждение о компиляции не будет отображаться. Вы можете использовать ваши собственные файлы * .rc по своему желанию.

1 голос
/ 22 марта 2011

Мне было трудно заставить это работать и, наконец, я прибег к использованию событий сборки. Было бы неплохо просто включить файл rc напрямую. Но если вы не получите другого ответа, который работает, вы можете добавить его в событие Pre-Build:

brcc32 "$ (PROJECTDIR) \ version.rc"

Затем просто включите файл ресурса скомпилированного файла в {$ R version.res}. Вам не нужно добавлять файл .rc в проект.

Для конфликта VersionInfo посмотрите информацию о версии для опции проекта. Вверху есть флажок для информации «Включить версию». Если вы снимите флажок, вы можете оставить {$ R * .res} на месте без конфликта.

...