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

自动递增构建号

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (13投票s)

2000年2月17日

viewsIcon

148669

downloadIcon

2254

描述了一种自动生成应用程序构建号的方法。

  • 下载演示项目 - 35 Kb

    更新: 2000年3月9日。请参阅下方以获取更新。

    此代码在每次构建时递增版本号。

    将 autobuild.dll 作为开发工作室的插件包含后,会发生以下情况。当您进行构建时,会在您项目的文件夹中创建/更新一个文件 autobuild.h。

    如果您希望在每次构建时递增您的版本号,请在生成的 autobuild.h 中将标志 INCREMENT_BUILD_NUM 设置为 true,并且将您项目的 .rc 文件的文件属性设置为读写。

    #ifndef __AUTOBUILD_H__
    #define __AUTOBUILD_H__
    //change the FALSE to TRUE for autoincrement of build number
    #define INCREMENT_BUILD_NUM TRUE
    #define BUILD_NUM 2723
    #endif //__AUTOBUILD_H__
    

    如果标志为 true,则项目的版本号将递增。如果标志为 false,或者 .rc 文件是只读的,则版本号不会递增。这就是包含插件到项目中所带来的改变的全部内容。

    在我的项目中,我还使用 Manuel Laflamme 来自 CodeGuru.com 网站的代码,从 .rc 文件中获取版本号,并在帮助-关于对话框中显示它。以下是用于在代码中获取版本号的代码片段。

    dlgAbout.cFileVersion.Open(m_sExePath + m_sExeName);
    dlgAbout.m_sBuild = "Pro-JCL version: " +
    dlgAbout.cFileVersion.GetProductVersion();
    

    在关于框中,我有一个 cstatic 控件,用于显示版本号。

    这种方法在与质量保证小组的交互中非常方便。希望您觉得它有用。


    更新: 2000年3月9日。

  • 下载更新后的演示项目 - 61 Kb

    MSDN 最近提供了一种在每次构建后递增版本号的机制。关键在于他们将版本资源放入 .rc2 文件而不是 .rc 文件中。我修改了我的插件来做同样的事情。也就是说,按照他们的说明将版本资源从 .rc 移动到 .rc2 文件。然后,像以前一样将插件添加到您的 IDE 中。

    文件 AutoBuild.h 将由开发工作室插件生成,并将包含以下内容

    #ifndef __AUTOBUILD_H__
    #define __AUTOBUILD_H__
    //change the FALSE to TRUE for autoincrement of build number
    #define INCREMENT_VERSION FALSE
    #define FILEVER        1,0,0,1
    #define PRODUCTVER     1,0,0,1
    #define STRFILEVER     "1, 0, 0, 1\0"
    #define STRPRODUCTVER  "1, 0, 0, 1\0"
    
    #endif //__AUTOBUILD_H__
    

    在您的项目中包含生成的文件,如果希望在每次构建时递增版本号,请将 INCREMENT_VERSION 标志设置为 TRUE。版本将在每次构建时递增。例如,1,0,0,1 将变为 1,0,0,2 ... 1,0,0,3 ...

    通过在版本资源中使用 FILEVERPRODUCTVERSTRFILEVERSTRPRODUCTVER 字符串来代替版本号,正如 MSDN 文章所演示的那样,我们摆脱了开发工作室重新加载修改后的 .rc 文件的烦人警告消息。这条消息促使我修改了代码以使用他们的方法。

    下面给出了 MSDN / VCDJ 文档,用于将版本资源从 .rc 文件移动到 .rc2 文件,并对版本号字符串进行相应的更改。

    从 .rc 文件中删除版本资源,并将其放置在 .rc2 文件中

    在文本编辑器中打开 MyProject.rc 和 MyProject.rc2(位于 Res 文件夹中)。要使用 Visual C++ 编辑器,请单击“文件”菜单上的“打开”,然后在 MyProject.rc 文件的“打开为”列表中选择“文本”。

    在 MyProject.rc 中找到版本资源语句。它应该看起来像这样

    ///////////////////////////////////////////////////////////////////////
    //
    // Version
    //
    
    VS_VERSION_INFO VERSIONINFO
     FILEVERSION 1,0,0,1
     PRODUCTVERSION 1,0,0,1
     FILEFLAGSMASK 0x3fL
    #ifdef _DEBUG
     FILEFLAGS 0x1L
    #else
     FILEFLAGS 0x0L
    #endif
     FILEOS 0x4L
     FILETYPE 0x1L
     FILESUBTYPE 0x0L
    BEGIN
        BLOCK "StringFileInfo"
        BEGIN
            BLOCK "040904b0"
            BEGIN
                VALUE "Comments", "Sample Application\0"
                VALUE "CompanyName", "Microsoft Corp.\0"
                VALUE "FileDescription", "MyProject MFC Application\0"
                VALUE "FileVersion", "1, 0, 0, 1\0"
                VALUE "InternalName", "MyProject\0"
                VALUE "LegalCopyright", "Copyright (C) 1999\0"
                VALUE "OriginalFilename", "MyProject.EXE\0"
                VALUE "ProductName", "MyProject Application\0"
                VALUE "ProductVersion", "1, 0, 0, 1\0"
           END
        END
        BLOCK "VarFileInfo"
        BEGIN
            VALUE "Translation", 0x409, 1200
        END
    END
    

    MyProject.rc 文件中剪切版本资源,并将其粘贴到 MyProject.rc2 文件中“在此处手动编辑资源”注释的下方。有关资源中每个字段的含义的信息,请参阅帮助中的 VERSIONINFO 资源语句。

    使用宏 FILEVERPRODUCTVER 替换 FILEVERSIONPRODUCTVERSION 数据。类似地,使用宏 STRFILEVERSTRPRODUCTVER 替换 FileVersionProductVersion 字符串数据。

    VS_VERSION_INFO 资源语句之前立即添加 #include AutoBuild.h。现在版本资源将如下所示

    ///////////////////////////////////////////////////////////////////////
    //
    // Version
    //
    #include "AutoBuild.h"
    VS_VERSION_INFO VERSIONINFO
     FILEVERSION FILEVER
     PRODUCTVERSION PRODUCTVER
     FILEFLAGSMASK 0x3fL
    #ifdef _DEBUG
     FILEFLAGS 0x1L
    #else
     FILEFLAGS 0x0L
    #endif
     FILEOS 0x4L
     FILETYPE 0x1L
     FILESUBTYPE 0x0L
    BEGIN
        BLOCK "StringFileInfo"
        BEGIN
            BLOCK "040904b0"
            BEGIN
                VALUE "Comments", "Sample Application\0"
                VALUE "CompanyName", "Microsoft Corp.\0"
                VALUE "FileDescription", "MyProject MFC Application\0"
                VALUE "FileVersion", STRFILEVER
                VALUE "InternalName", "MyProject\0"
                VALUE "LegalCopyright", "Copyright (C) 1997\0"
                VALUE "OriginalFilename", "MyProject.EXE\0"
                VALUE "ProductName", "MyProject Application\0"
                VALUE "ProductVersion", STRPRODUCTVER
            END
        END
        BLOCK "VarFileInfo"
        BEGIN
            VALUE "Translation", 0x409, 1200
        END
    END
    

    文件 AutoBuild.h 将由开发工作室插件生成,并将包含以下内容

    #ifndef __AUTOBUILD_H__
    #define __AUTOBUILD_H__
    //change the FALSE to TRUE for autoincrement of build number
    #define INCREMENT_VERSION FALSE
    #define FILEVER        1,0,0,1
    #define PRODUCTVER     1,0,0,1
    #define STRFILEVER     "1, 0, 0, 1\0"
    #define STRPRODUCTVER  "1, 0, 0, 1\0"
    
    #endif //__AUTOBUILD_H__
    
  • © . All rights reserved.