65.9K
CodeProject 正在变化。 阅读更多。
Home

添加构建日期和自动递增构建号

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.12/5 (14投票s)

2005 年 5 月 24 日

3分钟阅读

viewsIcon

90367

downloadIcon

2153

本文介绍如何向项目中添加自动化功能,以递增构建编号并添加可在文件属性窗口的“版本”选项卡中看到的构建日期。

引言

这里发布了很多文章和应用程序,但我找不到能满足我需求的。我不想向 Visual Studio 添加任何插件,也不想修改 IDE 应该维护和修改的任何.rc文件。我想添加更多版本信息,例如构建日期。这里提供的一些解决方案很好,但并不完整。它们只是我的解决方案的起点。

解决方案

目标是在项目的.rc文件中添加动态版本号和构建日期字符串。 从项目的 .rc 文件支持#include 指令开始,我进行了以下操作

  1. 定义了一些常量
    #define VERSION_MAJOR 4
    #define VERSION_MINOR 5
    #define VERSION_BUILD 46
    #define VERSION_QFE 11
    #define VERSION_BUILD_DATE "24/05/2005"
    #define VERSION_BUILD_TIME "08:37:55UTC"
    
    #define _STR(x) #x
    #define STR(x) _STR(x)
    #define VERSION_NUMBER VERSION_MAJOR,VERSION_MINOR,
                                      VERSION_BUILD,VERSION_QFE
    #define VERSION_STRING STR(VERSION_MAJOR) "." STR(VERSION_MINOR) "." \
                                   STR(VERSION_BUILD) "." STR(VERSION_QFE)
    
    #define VERSION_COMPANY ""
    #define VERSION_COPYRIGHT "(C) Gugulea 2005"
    #define VERSION_TRADEMARK ""
    #define VERSION_BUILD_DATE_TIME VERSION_BUILD_DATE " - " \
                                                     VERSION_BUILD_TIME

    文件的版本如下所示:4.5.46.11。 这些数字代表产品的主版本号、次版本号、构建版本号和 qfe 版本号。 我选择修改构建版本号,尽管我的解决方案可以轻松支持修改任何数字,甚至添加更多。

  2. 将所有这些 #define 放入version.h文件中,我将其包含在.rc文件中
    #ifndef _MAC
    /////////////////////////
    //
    // Version
    //
    #include "version.h"
    .........................
    #endif    // !_MAC

    因为只有其中一些数字/字符串被修改,所以我将它们分离到version.ver

    #define VERSION_MAJOR 4
    #define VERSION_MINOR 5
    #define VERSION_BUILD 46
    #define VERSION_QFE 11
    #define VERSION_BUILD_DATE "24/05/2005"
    #define VERSION_BUILD_TIME "08:37:55UTC"

    version.h

    #include "version.ver"
    
    #define _STR(x) #x
    #define STR(x) _STR(x)
    
    #define VERSION_NUMBER VERSION_MAJOR,VERSION_MINOR,
                                  VERSION_BUILD,VERSION_QFE
    #define VERSION_STRING STR(VERSION_MAJOR) "." STR(VERSION_MINOR) "." \
                                     STR(VERSION_BUILD) "." STR(VERSION_QFE)
    #define VERSION_COMPANY ""
    #define VERSION_COPYRIGHT "(C) Gugulea 2005"
    #define VERSION_TRADEMARK ""
    #define VERSION_BUILD_DATE_TIME VERSION_BUILD_DATE " - " \
                                              VERSION_BUILD_TIME

    version.h 包括 version.ver 并且被 .rc 文件包含,因此我没有直接将版本号添加到 .rc 文件中,而是将它们分离到更多文件中。 唯一会被修改的文件是 version.ver 文件,它非常简单易于维护和修改,并且它将是唯一一个在每次构建时自动修改的文件。

    .rc 文件将如下所示

    #ifndef _MAC
    //////////////////////////////////////////
    //
    // Version
    //
    #include "version.h"
    
    VS_VERSION_INFO VERSIONINFO
    FILEVERSION VERSION_NUMBER
    PRODUCTVERSION VERSION_NUMBER
    ...
    VALUE "Build Date", VERSION_BUILD_DATE_TIME "\0"
    VALUE "CompanyName", VERSION_COMPANY "\0"
    VALUE "FileVersion", VERSION_STRING "\0"
    VALUE "LegalCopyright", VERSION_COPYRIGHT "\0"
    VALUE "LegalTrademarks", VERSION_TRADEMARK "\0"
    VALUE "ProductVersion", VERSION_STRING "\0"
    ...
    #endif    // !_MAC

    “构建日期”字符串是手动添加的,它将出现在模块、DLL 或 EXE 的版本选项卡中。

    现在 Visual C++ 和 .rc 文件还有另一个问题。 如果您修改了一些资源或向应用程序添加了新资源,它将覆盖版本字符串。 因此,您可以将之前的所有部分放在一个 .rc2 文件中,您可以在 .rc 文件中包含该文件。

    就这样,您包含在资源文件中的两个文件是:version.hversion.ver。 后者将由外部应用程序修改,而资源文件不会被触及。 makeversion.exe 文件会将 VERSION_BUILD_DATEVERSION_BUILD_TIME 值更新为当前值,并将递增 VERSION_BUILD 编号。 您可以修改它以更新 version.ver 中的任何数字,例如 VERSION_MINOR

  3. 在构建时运行 makeversion 工具。 对于 VC6,您必须将其添加到项目的“预链接步骤”条目中。
    For Release:
    makeversion.exe /inc version.ver
    rc.exe /l 0x409 /fo"Release/cdcdcd.res" /d "NDEBUG" "C:\cdcdcd.rc"
    
    For Debug:
    makeversion.exe version.ver
    rc.exe /l 0x409 /fo"Debug/cdcdcd.res" /d "_DEBUG" "C:\cdcdcd.rc"

    rc 命令可以在项目的构建日志中找到。

/inc 选项将递增构建编号,并且只应添加到产品的发布版本中。 makeversion.c 是用 C 编写的; version.ver 文件包含标准的 #define 指令,并且不支持任何注释; 空行也被忽略; 命令行中的 /h 或 /? 选项会显示更多参数。 如果 version.ver 文件不存在,它将被自动创建。 如果它为空,它将被填充为默认版本 1.0.0.0 和当前时间和日期。

© . All rights reserved.