2011-03-22 23 views
6

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

這是由於程序包自身生成它自己的包含MainIcon和VersionInfo條目的package.res文件。 VersionInfo與我自己的VersionInfo條目有衝突。

我再嘗試刪除{$ R * .RES}在DPK文件:

package SQL.Alpha.resource.core; 

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

重建項目,一切工作正常。警告消失了。

不過,也有一些副作用,去除{$ R * .RES}手動:再次

  1. 德爾福IDE將添加{$ R * .RES}如果試圖在包增加新的單位或在Project |中進行修改選項...
  2. 所有RcCompile條目.dproj文件將通過文件package.dpk再次移除{$ R * .RES}除去

我可以先副作用容忍。

但是,第二個副作用超出了我的控制範圍。 package.dproj中缺少的RcCompile將導致rc文件不再由brcc32編譯。刪除文件系統中的.res文件會導致編譯錯誤。

有沒有人有想法如何克服這個問題?謝謝。

回答

5

在Delphi XE2中,您現在可以通過Project | Project刪除Delphi包(* .bpl)的內置版本信息。選項。導航到「版本信息」包,並取消選中「在項目中包含版本信息」。

通過這樣做,將不會在* .res文件中生成內置版本信息,從而不會顯示編譯器警告消息。您可以根據需要使用自定義的* .rc文件。

1

我很難得到這個工作,並最終訴諸使用構建事件。直接包含rc文件會很好。但是,如果你沒有得到一個不同的答案的作品,你可以將它添加到您的預生成事件:

brcc32「$(PROJECTDIR)\ version.rc」

然後,只需包含編譯的文件資源文件與{$ R version.res}。您不需要將.rc文件添加到項目中。

對於VersionInfo衝突,請查看版本信息的項目選項。 「包含版本」信息頂部有一個複選框。如果您取消選中,您可以保持{$ R * .res}不衝突。

+0

我在項目組中有超過200個運行時軟件包項目。創建預構建事件非常繁瑣,我認爲這只是一個解決方法。對於您的信息,我們無法取消選中VersionInfo for package(.dpk)項目。它只適用於應用程序(.exe)項目。 – 2011-03-22 06:36:34