删除package.dpk文件中的{$ R * .res}将删除.dproj文件中的rccompile

时间:2011-03-22 04:48:30

标签: delphi resources package rc

我使用自己的.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}:

  1. 如果您尝试在包中添加新单元或在项目中添加和更改,Delphi IDE将再次添加{$ R * .res}选项...
  2. .dproj文件中的所有RcCompile条目都将被删除
  3. 我可以通过在package.dpk文件中再次删除{$ R * .res}来容忍第一个副作用。

    然而,第二个副作用是我无法控制的。 package.dproj中缺少的RcCompile将导致rc文件不再由brcc32编译。删除文件系统中的.res文件将导致编译错误。

    有没有人有想法如何克服这个问题?谢谢。

2 个答案:

答案 0 :(得分:5)

在Delphi XE2中,您现在可以通过Project |删除Delphi软件包(* .bpl)的内置版本信息。选项。导航到“版本信息”包,并取消选中“在项目中包含版本信息”。

这样,* .res文件中不会生成内置版本信息,因此不会显示编译器警告消息。您可以根据需要使用自定义的* .rc文件。

答案 1 :(得分:1)

我无法使其工作并最终使用构建事件。直接包含rc文件会很好。但是如果你没有得到一个有效的答案,你可以将它添加到你的预建活动中:

brcc32“$(PROJECTDIR)\ version.rc”

然后只使用{$ R version.res}包含已编译的文件资源文件。您无需将.rc文件添加到项目中。

对于VersionInfo冲突,请查看版本信息的项目选项。 “Include Version”信息顶部有一个复选框。如果取消选中,您可以将{$ R * .res}保留在原位且没有冲突。