【问题标题】:Synchronizing Version Resources in Visual Studio C++ (Win32) Projects在 Visual Studio C++ (Win32) 项目中同步版本资源
【发布时间】:2023-04-03 18:29:01
【问题描述】:

我有一个包含大约 8 个独立项目的解决方案,每次我对整个解决方案进行发布构建时,我都需要确保每个项目的二进制输出的版本字符串相同。有没有一种简单的方法来同步项目资源文件的 VS_VERSION_INFO 部分?

【问题讨论】:

    标签: visual-studio version


    【解决方案1】:

    我不知道这是您想要的方式,但 .rc 文件允许包含,您可以在版本块中使用 #define

    在头文件中定义版本号

    
    #define VER_MAJOR 8
    #define VER_MINOR 00
    #define VER_BUILD_HI    00
    #define VER_BUILD_LO 021
    #define VER_FLAGS   VS_FF_PRERELEASE
    
    
    // The Binary form of the version numbers
    #define VER_FILE    VER_MAJOR, VER_MINOR, VER_BUILD_HI, VER_BUILD_LO
    #define VER_PRODUCT VER_MAJOR, VER_MINOR, 0, 0
    
    #define VER_STR(arg) #arg
    
    // The String form of the version numbers
    #define VER_FILE_STRING VALUE "FileVersion", "8.0\0"
    #define VER_PRODUCT_STRING VALUE "ProductVersion", "8.0\0"
    

    VS_VERSION_INFO 块中使用它们

    
    #include "bversion.h" //#define values in here
    
    VS_VERSION_INFO VERSIONINFO
     FILEVERSION VER_FILE
     PRODUCTVERSION VER_PRODUCT
     FILEFLAGSMASK 0x2fL
    #ifdef _DEBUG
     FILEFLAGS 0x1L
    #else
     FILEFLAGS 0x0L
    #endif
     FILEOS 0x4L
     FILETYPE 0x1L
     FILESUBTYPE 0x0L
    BEGIN
        BLOCK "StringFileInfo"
        BEGIN
            BLOCK "040904b0"
            BEGIN
                VALUE "Comments", "\0"
                VALUE "CompanyName", "XXX\0"
                VALUE "FileDescription", "YYY\0"
                VER_FILE_STRING
                VALUE "InternalName", "ZZZ\0"
                VALUE "LegalCopyright", "© 2009 PDQ.\0"
                VALUE "LegalTrademarks", "AAA\0"
                VALUE "OriginalFilename", "BBB.EXE\0"
                VALUE "PrivateBuild", "\0"
                VALUE "ProductName", "CCC\0"
                VER_PRODUCT_STRING
                VALUE "SpecialBuild", "\0"
            END
        END
        BLOCK "VarFileInfo"
        BEGIN
            VALUE "Translation", 0x409, 1200
        END
    END
    

    在所有项目中引用一个头文件,并在每次构建之前更改它。

    【讨论】:

      【解决方案2】:

      我们使用 FinalBuilder 进行构建,让它通过文件(作为文本文件)并使用正确的版本信息更新它们。

      【讨论】:

        【解决方案3】:

        实现这一点的最简单方法是使用预构建步骤,该步骤为您的所有资源文件调用某种类型的脚本(sed/awk、PowerShell 等),并在适当的位置放入正确的值。如果您使用 SVN,那么 TortoiseSVN 发行版中的 SubWCRev 也可以用于此部分,并且可以自动使用存储库中的修订号作为版本字符串。

        【讨论】:

          【解决方案4】:

          您可以使用ResourceLib 编写一些代码来执行此操作或采用a build process that does it for you

          【讨论】:

            猜你喜欢
            • 2017-08-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-03
            • 2016-08-26
            • 2020-07-06
            • 1970-01-01
            相关资源
            最近更新 更多