如何增量后 Visual C++ 中的每个生成的版本信息

来源:互联网 发布:ubuntu 安装 deb 编辑:程序博客网 时间:2024/06/05 09:07

您可以编写一个程序来修改该资源编译器 (.rc) 文件,而不是在此处使用所述的步骤。但是,RC 文件是 Visual C++ 的控制之下。Visual C++ 修改 RC 文件,在保存时,这可能会影响版本资源。在这一节中所述的方法可以应用于任何 Visual C++ 项目。此示例使用 Microsoft 基础类项目。

创建新项目时使用 MFC (EXE) 应用程序向导,称它为我的项目我的项目会有一个 MyProject.rc 文件,其中包括 MyProject.rc2。.Rc2 文件旨在为用户定义的资源。请按照下列步骤,可以增加我的项目的每个生成后的版本信息:

  1. 删除.rc 文件的版本资源并将其放置在.rc2 文件中:

    1. 在文本编辑器中打开 MyProject.rc 和 MyProject.rc2 (文件夹中找到 Res)。若要使用 Visual C++ 编辑器中,单击文件菜单上的打开,MyProject.rc 文件打开方式列表中选择文本
    2. 在 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 0x0LBEGIN    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    ENDEND
    3. 剪切从 MyProject.rc 文件的版本资源并将其粘贴到 MyProject.rc2 文件中一则评语下面"添加手动编辑资源。在资源域中的每一个的含义的信息,请参阅帮助中的 VERSIONINFO 资源语句。
  2. 替换为 FILEVER 和 PRODUCTVER 的宏的文件版本和产品版本的数据。同样,STRFILEVER 和 STRPRODUCTVER 宏替换字符串数据的新的文件版本和产品版本。
  3. 添加 # VS_VERSION_INFO 资源语句之后,可以立即 includeVersionNo.h现在的版本资源将如下所示:
    /////////////////////////////////////////////////////////////////////// // // Version// #include "VersionNo.h"VS_VERSION_INFO VERSIONINFO FILEVERSION FILEVER PRODUCTVERSION PRODUCTVER FILEFLAGSMASK 0x3fL#ifdef _DEBUG FILEFLAGS 0x1L#else FILEFLAGS 0x0L#endif FILEOS 0x4L FILETYPE 0x1L FILESUBTYPE 0x0LBEGIN    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    ENDEND
  4. 创建您的项目所在的目录中名为 VersionNo.h 的头文件。此文件将包含以下语句,它们是在第 2 步中使用的宏的定义:
    #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"
    注意: 在最后一行上添加换行符和回车符回车符。

    现在,MyProject.rc 文件包括 MyProject.rc2,和 MyProject.rc2 文件包括 VersionNo.h。
  5. 将使用 Visual Basic 脚本宏修改 VersionNo.h 文件的内容。下文中的宏与Visual C++ BuildFinish 事件关联,它将在build完成后被触发。每当调用此 VB 脚本代码时,它首先将放在头文件的版本号加固定金额,然后保存该文件,并将其关闭。在后续版本中,可执行文件中包含新的版本号。

    若要安装和使用 VB 脚本代码,请执行以下操作:

    1. 打开现有的 DSM (宏) 文件或 Visual C++ 中创建一个新的 DSM 文件。创建新的文件、 在文件菜单上单击新建文件选项卡上选择的宏文件、 为它指定一个名称,并单击确定
    2. 粘贴下面的以下 VB 脚本代码 (空的 DSM 文件不能安装在 Visual C++ ; 下一步解释安装):
      Function GetProjectDir(FullName)'VC++ doesn't provide any method for getting the path of the active project'See the VB Script reference for more information on the VB Script functions 'used in this functionDim proj_pathproj_path = Split(StrReverse(FullName),"\",-1,1)Dim countcount = UBound(proj_path)Dim full_pathfull_path = ""Dim ifor i = 1 to count full_path = full_path & "\" & proj_path(i)nextGetProjectDir = StrReverse(full_path)End FunctionSub ReplaceText(selection, count, incrementby)'selection represents the TextSelection object'count represents the position of the version number to be incremented'incrementby represents a number that will be added to the existing version numberselection.WordRight dsMove, countselection.WordRight dsExtend, 1Dim strstr = selection.Textstr = str + incrementbyselection.Text = strEnd SubSub Application_BuildFinish(numError, numWarning)'This event will be triggered after every build of a project'You can check numError and/or numWarning to determine if you want to continue'If numError <> 0 Then    'exit sub'Obtain the full path of the active projectDim full_pathfull_path = GetProjectDir(ActiveProject.FullName)full_path = full_path & "versionno.h"'Open the VersionNo.h fileDocuments.Open full_path'Obtain the TextSelection objectDim selectionset selection = ActiveDocument.Selectionselection.StartOfDocument 'Increment the version informationReplaceText selection, 9, 1selection.LineDownselection.StartOfLineReplaceText selection, 9, 1selection.LineDownselection.StartOfLineReplaceText selection, 10, 1selection.LineDownselection.StartOfLineReplaceText selection, 10, 1ActiveDocument.SaveActiveDocument.Close End Sub
      注意:此代码具有不受支持的示例。为您生成方案,您可以修改它。
    3. 如果尚未安装,请安装 DSM 文件。若要安装,请单击工具菜单上的自定义外接程序和宏文件选项卡浏览以选择 DSM 文件,和,单击关闭
  6. 生成菜单中选择生成 MyProject.exe在生成完成后,打开 VersionNo.h 文件。它将包含以下语句:
    #define FILEVER        1,0,0,2#define PRODUCTVER     1,0,0,2#define STRFILEVER     "1, 0, 0, 2\0"#define STRPRODUCTVER  "1, 0, 0, 2\0"
    如果您生成代码再次强调,在此版本信息包含在可执行文件,并递增的版本信息。可以引入一些在前面所述防止递增的版本号,如果生成产生错误的宏代码。
0 0
原创粉丝点击