Я использую свой собственный файл .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} вручную:
- Delphi IDE снова добавит {$ R * .res}если вы пытаетесь добавить новый модуль в пакет или внести изменения в Project |Параметры ...
- Все записи RcCompile в файле .dproj будут удалены
Я могу допустить с первым побочным эффектом, удалив {$ R * .res} снова в package.dpkфайл.
Однако, 2-й побочный эффект вне моего контроля.Отсутствующий RcCompile в package.dproj приведет к тому, что файл rc не будет скомпилирован brcc32 снова.Из-за этого удаление файлов .res в файловой системе приведет к ошибке компиляции.
У кого-нибудь есть идеи, как решить эту проблему?Спасибо.