我使用我自己的.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}手動:再次
- 德爾福IDE將添加{$ R * .RES}如果試圖在包增加新的單位或在Project |中進行修改選項...
- 所有RcCompile條目.dproj文件將通過文件package.dpk再次移除{$ R * .RES}除去
我可以先副作用容忍。
但是,第二個副作用超出了我的控制範圍。 package.dproj中缺少的RcCompile將導致rc文件不再由brcc32編譯。刪除文件系統中的.res文件會導致編譯錯誤。
有沒有人有想法如何克服這個問題?謝謝。
我在項目組中有超過200個運行時軟件包項目。創建預構建事件非常繁瑣,我認爲這只是一個解決方法。對於您的信息,我們無法取消選中VersionInfo for package(.dpk)項目。它只適用於應用程序(.exe)項目。 – 2011-03-22 06:36:34