Cómo incrementar la información de versión después de cada generación en C++

Seleccione idioma Seleccione idioma
Id. de artículo: 237870 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

Visual C++ no tiene una característica para incrementar automáticamente la información del recurso de versión del proyecto después de cada generación. Este artículo describe una forma de proporcionar una característica de tal.

Más información

Puede escribir un programa para modificar el archivo (.rc) del compilador de recursos en lugar de utilizar los pasos descritos aquí. Sin embargo, el archivo RC está bajo el control de Visual C++. Visual C++ modifica el archivo RC al guardar, y esto puede afectar el recurso de versión. El método descrito en esta sección se puede aplicar a cualquier proyecto de Visual C++. Este ejemplo utiliza un proyecto de Microsoft Foundation Classes.

Crear un nuevo proyecto mediante el Asistente para aplicaciones de MFC (EXE) y llamarla MyProject . MyProject tendrá un archivo MyProject.rc, que incluye MyProject.rc2. El archivo. RC2 está pensado para los recursos definidos por el usuario. Siga estos pasos para incrementar la información de versión del MyProject después de cada generación:
  1. Quitar el recurso de versión del archivo .rc y colocarlo en el archivo. RC2:

    1. Abra MyProject.rc y MyProject.rc2 (se encuentra en la carpeta de recursos), en un editor de texto. Para utilizar el editor de Visual C++, haga clic en Abrir en el menú archivo y seleccione texto en la lista Abrir como para el archivo MyProject.rc.
    2. Encontrar instrucciones de recursos de la versión en MyProject.rc. Debe ser similar:
      /////////////////////////////////////////////////////////////////////// 
      // 
      // 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. Cortar el recurso de versión del archivo MyProject.rc y péguelo en el archivo MyProject.rc2 debajo del comentario "Agregar modificarse manualmente recursos aquí". Para obtener información acerca de lo que significa cada uno de los campos en el recurso, vea la instrucción de recurso VERSIONINFO en la Ayuda.
  2. Reemplazar los datos FILEVERSION y PRODUCTVERSION con macros FILEVER y PRODUCTVER. Reemplazar de forma similar, los datos de cadena FileVersion y ProductVersion con las macros STRFILEVER y STRPRODUCTVER.
  3. Agregue un # incluir VersionNo.h inmediatamente antes de la instrucción de recurso VS_VERSION_INFO. Como ahora buscará el recurso de versión:
    /////////////////////////////////////////////////////////////////////// 
    // 
    // 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. Cree un archivo de encabezado denominado VersionNo.h en el mismo directorio que el proyecto. Este archivo contendrá las instrucciones siguientes, que son las definiciones de macros utilizadas en el paso 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"
    						
    Nota: Agregar avance de línea y retorno de carro caracteres en la última línea.

    Ahora, MyProject.rc archivo incluye MyProject.rc2 y MyProject.rc2 archivo incluye VersionNo.h.
  5. Se modificará el contenido del archivo VersionNo.h mediante una macro de Visual Basic Script. La macro descritas controla el evento de Visual C++ BuildFinish, por lo que no se desencadenen hasta que finaliza una generación. Siempre que se llame este código VB Script, primero se incrementa los números de versión dentro del archivo de encabezado en un importe fijo, guarda el archivo y lo cierra. Durante una generación posterior, el nuevo número de versión se incluye en el archivo ejecutable.

    Para instalar y utilizar el código VB Script, haga lo siguiente:

    1. Abra un archivo de DSM (macro) existente o cree un nuevo archivo DSM en C++. Para crear un nuevo archivo, haga clic en nuevo en el menú archivo , seleccione Archivo de macro en la ficha archivos , asígnele un nombre y haga clic en Aceptar .
    2. Pegue el siguiente código de VB Script siguiente (un archivo DSM vacío no puede instalarse en Visual C++; el paso siguiente explica la instalación):
      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
      								
      Nota: este código es un ejemplo no compatible. Puede modificar para su escenario de generación.
    3. Instalar el archivo DSM si no está ya instalado. Para instalar, haga clic en Personalizar en el menú Herramientas , en la ficha complementos y macros de los archivos , busque y seleccione el archivo DSM y haga clic en Cerrar .
  6. Seleccione Generar MyProject.exe en el menú Generar . Cuando finalice la generación, abra el archivo VersionNo.h. Va a contener las instrucciones siguientes:
    #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"
    						
    si generar el código nuevo, esta información de versión en incluido en el archivo ejecutable y la información de versión se incrementa. Puede introducir algún código en la macro descrita anteriormente para evitar que los números de versión incremental si la generación produce errores.

Referencias

Para obtener más información sobre el modelo de objetos C++ vea el tema siguiente en la biblioteca MSDN:
http://msdn.microsoft.com/en-us/library/aa712880(VS.71).aspx

Para obtener más información sobre las macros de VB Script, vea el tema siguiente en la biblioteca MSDN:
http://msdn.microsoft.com/en-us/library/aa247202(VS.60).aspx

Para obtener más información sobre lenguaje VB Script, vea el tema siguiente en la biblioteca MSDN:
http://msdn.microsoft.com/en-us/library/d1wf56tt(vs.71).aspx

Para obtener más información sobre la instrucción de recurso VERSIONINFO de Visual C++, vea el tema siguiente en la biblioteca MSDN:
http://msdn.microsoft.com/en-us/library/aa381043.aspx

Propiedades

Id. de artículo: 237870 - Última revisión: viernes, 2 de septiembre de 2005 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise
  • Microsoft Visual C++ 5.0 Professional
  • Microsoft Visual C++ 6.0 Professional
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palabras clave: 
kbmt kbautomation kbdevstudio kbhowto kbide kbscript kbvcobj KB237870 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 237870

Enviar comentarios

 

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