2011-03-22 2 views
6

저는 자신의 .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 파일을 추가 | :

내 library.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 항목과 충돌합니다.

package SQL.Alpha.resource.core; 

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

이 프로젝트를 다시 빌드 모든 것이 잘 작동 :

나는 다음 DPK 파일에서 {$의 R * .RES}을 제거하려고. 경고가 사라졌습니다. 당신이 패키지에 새로운 장치를 추가하려고 경우 또는 다시

  1. 델파이 IDE가 추가됩니다 {$의 R을 * .RES} :

    그러나, 수동으로 {* .RES $의 R}를 제거하는 부작용이있다 프로젝트에서 작성 및 변경 | .DPROJ 파일에서 옵션 ...

  2. 모든 RcCompile 항목은 package.dpk 파일에 다시 {$의 R * .RES}를 제거하여

내가 처음 부작용에 견딜 수을 제거됩니다.

그러나 제 2의 부작용은 제 통제 밖입니다. package.dproj의 누락 된 RcCompile은 rcc 파일이 brcc32에 의해 다시 컴파일되지 않도록합니다. 파일 시스템에서 .res 파일을 제거하면 컴파일로 인해 오류가 발생합니다.

누구든지이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 고맙습니다.

답변

5

Delphi XE2에서 Delphi 패키지 (* .bpl)의 기본 버전 정보를 Project | 옵션. "버전 정보"패키지로 이동하고 "프로젝트에 버전 정보 포함"을 선택 해제하십시오.

이렇게하면 내장 버전 정보가 * .res 파일에 생성되지 않으므로 컴파일러 경고 메시지가 표시되지 않습니다. 원하는 * .rc 파일을 원하는대로 사용할 수 있습니다.

1

이 작업을 수행하는 데 어려움을 겪고 마침내 빌드 이벤트를 사용했습니다. rc 파일을 직접 포함시키는 것이 좋을 것입니다. 그러나 당신은 당신이 당신의 빌드 전 이벤트에이를 추가 할 수 있습니다 작동하는 다른 대답하지 않는 경우 :

가 그럼 그냥 컴파일 된 파일의 리소스 파일을 포함 "version.rc $ (PROJECTDIR) \"

brcc32을 {$ R version.res}을 (를) 사용합니다. .rc 파일을 프로젝트에 추가 할 필요가 없습니다.

VersionInfo 충돌의 경우 버전 정보에 대한 프로젝트 옵션을 살펴보십시오. 상단에 "버전 포함"정보가있는 확인란이 있습니다. 선택을 취소하면 충돌없이 {$ R * .res}를 그대로 둘 수 있습니다.

+0

프로젝트 그룹에 200 개가 넘는 런타임 패키지 프로젝트가 있습니다. 그것은 미리 빌드 이벤트를 생성하는 지루한이며 이것이 단지 해결 방법 해결책이라고 생각합니다. 귀하의 정보를 위해 우리는 패키지 (.dpk) 프로젝트의 VersionInfo를 선택 해제 할 수 없습니다. 응용 프로그램 (.exe) 프로젝트에서만 사용할 수 있습니다. –

관련 문제