2009-11-15 37 views
0

我們已經設置了一個簡單的版本系統,我們建立確保內置文件總是表明他們是否是測試版調試或Beta發佈版本Visual Studio 2008的預處理器wierdness

我移動的文件版本信息向MYAPP。 RC2和version.h中

// version.h 
    // _DEBUG is defined by VS 

    #define _BETA 

    #ifdef _BETA 
    #define FILE_DESC1 _T("BETA ") 
    #else 
    #define FILE_DESC1 // blank on purpose 
    #endif 

    #ifdef _DEBUG 
    #define FILE_DESC2 _T("Debug Version ") 
    #else 
    #define FILE_DESC2 _T("Release Version ") // this is greyed out in the ide when building 
    #endif 

    #define FILE_DESC FILE_DESC1 FILE_DESC2 


// myapp.rc2 
include "version.h" 

#ifndef _T 
#define _T(x) x 
#endif 

VS_VERSION_INFO VERSIONINFO 
FILEVERSION PROD_VER_MJR,PROD_VER_MIN,PROD_VER_UPD,JOBUILDER_BUILD 
PRODUCTVERSION PROD_VER_MJR,PROD_VER_MIN 
FILEFLAGSMASK 0x3fL 
#ifdef _DEBUG 
FILEFLAGS 0x1L 
#else 
FILEFLAGS 0x0L 
#endif 
FILEOS 0x4L 
FILETYPE 0x1L 
FILESUBTYPE 0x0L 
BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040904e4" 
     BEGIN 
      VALUE "CompanyName", COMPANY_NAME 
      VALUE "FileDescription", FILE_DESC 
      VALUE "FileVersion", JOBBUI_VERSION 
      VALUE "InternalName", "MyApp.exe" 
      VALUE "LegalCopyright", COPYRIGHT 
      VALUE "OriginalFilename", "MyApp.exe" 
      VALUE "ProductName", PRODUCT_NAME 
      VALUE "ProductVersion", PRODUCT_VERSION 
      VALUE "Comments", COMMENTS 
     END 
    END 
    BLOCK "VarFileInfo" 
    BEGIN 
     VALUE "Translation", 0x409, 1252 
    END 
END 

然而,當EXE是建在調試輸出目錄中的文件的描述總是錯誤地說,而不是「BETA發行版本」,「BETA調試版本」然而,IDE表示「創建的#define FILE_DESC2 _T(「Debug Version」)將被使用。爲什麼會這樣呢?我在另一個項目中使用了這些文件,並且它們正常工作。

謝謝你......

回答

1

修正:在調試版本我添加到_DEBUG -

項目屬性>資源>預處理器定義。它現在按預期工作。

0

的最好辦法「調試」像這樣的問題預處理是您認爲您的宏實際上是越來越#define'd

點堅持一個#error指令一旦你知道預處理器實際採用了哪條路徑,你可以嘗試找出它爲什麼這樣做......

編輯:除了預處理器運行資源編譯器可能會不同於編譯器關於什麼宏是預定義的。

+0

您編輯:是正確的。我按照你的建議添加了#error指令,然後得到這個錯誤「致命錯誤RC1116:RC在預處理器錯誤後終止」看起來資源編譯器在#error(可能不知道/支持)和我原來的#defines中有問題。我想知道這個問題嗎?山姆代碼「似乎」在另一個VS2008項目上工作。 – Canacourse 2009-11-15 20:48:31