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

文章翻译 文章翻译
文章编号: 237870 - 查看本文应用于的产品
展开全部 | 关闭全部

概要

Visual C++ 不支持自动递增每个生成后的版本资源信息项目的功能。本文介绍一种方法来提供此类功能。

更多信息

您可以编写一个程序来修改该资源编译器 (.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 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
      							
    3. 剪切从 MyProject.rc 文件的版本资源并将其粘贴到 MyProject.rc2 文件中一则评语下面"添加手动编辑资源。在资源域中的每一个的含义的信息,请参阅帮助中的 VERSIONINFO 资源语句。
  2. 替换为 FILEVER 和 PRODUCTVER 的宏的文件版本和产品版本的数据。同样,STRFILEVER 和 STRPRODUCTVER 宏替换字符串数据的新的文件版本和产品版本。
  3. 添加 #include VersionNo.h 紧靠 VS_VERSION_INFO 资源声明。现在的版本资源将如下所示:
    /////////////////////////////////////////////////////////////////////// 
    // 
    // 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 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
    					
  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 事件,因此它将不激发才生成完成。每当调用此 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 function
      
      Dim proj_path
      proj_path = Split(StrReverse(FullName),"\",-1,1)
      
      Dim count
      count = UBound(proj_path)
      
      Dim full_path
      full_path = ""
      Dim i
      
      for i = 1 to count 
      	full_path = full_path & "\" & proj_path(i)
      next
      
      GetProjectDir = StrReverse(full_path)
      
      End Function
      
      
      Sub 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 number
      
      selection.WordRight dsMove, count
      selection.WordRight dsExtend, 1
      Dim str
      str = selection.Text
      str = str + incrementby
      
      selection.Text = str
      
      End Sub
      
      
      Sub 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 project
      Dim full_path
      full_path = GetProjectDir(ActiveProject.FullName)
      
      full_path = full_path & "versionno.h"
      
      'Open the VersionNo.h file
      Documents.Open full_path
      
      'Obtain the TextSelection object
      Dim selection
      set selection = ActiveDocument.Selection
      selection.StartOfDocument 
      
      'Increment the version information
      ReplaceText selection, 9, 1
      selection.LineDown
      selection.StartOfLine
      ReplaceText selection, 9, 1
      selection.LineDown
      selection.StartOfLine
      ReplaceText selection, 10, 1
      selection.LineDown
      selection.StartOfLine
      ReplaceText selection, 10, 1
      
      ActiveDocument.Save
      ActiveDocument.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"
    						
    如果您生成代码再次强调,在此版本信息包含在可执行文件,并递增的版本信息。可以引入一些在前面所述防止递增的版本号,如果生成产生错误的宏代码。

参考

Visual C++ 对象模型的详细信息,请参阅 MSDN 库中的以下主题:
http://msdn.microsoft.com/en-us/library/aa712880 (VS.71).aspx

VB 脚本宏的详细信息,请参阅 MSDN 库中的以下主题:
http://msdn.microsoft.com/en-us/library/aa247202 (VS.60).aspx

VB 脚本语言的详细信息,请参阅 MSDN 库中的以下主题:
http://msdn.microsoft.com/en-us/library/d1wf56tt (vs.71).aspx

Visual C++ VERSIONINFO 资源语句的详细信息,请参阅 MSDN 库中的以下主题:
http://msdn.microsoft.com/en-us/library/aa381043.aspx

属性

文章编号: 237870 - 最后修改: 2014年2月9日 - 修订: 5.0
这篇文章中的信息适用于:
  • Microsoft Visual C++ 5.0 企业版
  • Microsoft Visual C++ 5.0 专业版
关键字:?
kbautomation kbdevstudio kbhowto kbide kbscript kbvcobj kbmt KB237870 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 237870
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com