我使用自己的 .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
我通过 Project | 将 .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 条目有冲突。
然后我尝试删除 dpk 文件中的 {$R *.res} :
package SQL.Alpha.resource.core;
{$R 'library.res'}
{$ALIGN 8}
重建项目,一切正常。警告消失了。
但是,手动删除 {$R *.res} 有一些副作用:
- 如果您尝试在包中添加新单元或在 Project | 中进行更改,Delphi IDE 将再次添加 {$R *.res} 选项...
- .dproj 文件中的所有 RcCompile 条目将被删除
我可以通过在 package.dpk 文件中再次删除 {$R *.res} 来容忍第一个副作用。
然而,第二个副作用是我无法控制的。package.dproj 中缺少的 RcCompile 将导致 rc 文件不再被 brcc32 编译。删除文件系统中的 .res 文件将导致编译错误。
有谁知道如何克服这个问题?谢谢你。