Como informações de versão de incremento após cada compilação no Visual C++

Traduções de Artigos Traduções de Artigos
Artigo: 237870 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

Visual C++ não tem uma funcionalidade para incrementar automaticamente as informações de recurso de versão do projecto depois de cada versão. Este artigo descreve uma forma de fornecer uma funcionalidade tal.

Mais Informação

Pode escrever um programa para modificar o ficheiro do compilador (.rc) de recursos em vez de utilizar os passos descritos aqui. No entanto, o ficheiro RC está sob o controlo do Visual C++. Visual C++ modifica o ficheiro ao guardar RC e isto pode afectar o recurso de versão. A abordagem descrita nesta secção pode ser aplicada a qualquer projecto de Visual C++. Este exemplo utiliza um projecto de Microsoft Foundation Classes.

Crie um novo projecto utilizando Appwizard MFC (EXE) e chamá-lo MyProject . MyProject terá um ficheiro MyProject.rc, que inclui MyProject.rc2. O ficheiro .RC2 destina-se recursos definida pelo utilizador. Siga estes passos para incrementar versão informações do MyProject após cada compilação:
  1. Remova o recurso de versão do ficheiro .rc e coloque-o no ficheiro .RC2:

    1. Abra MyProject.rc e MyProject.rc2 (localizado na pasta res), num editor de texto. Para utilizar o editor do Visual C++, clique em Abrir no menu ficheiro e seleccione o texto na lista Como abrir o ficheiro MyProject.rc.
    2. Localize a versão recurso instruções MyProject.rc. Deve ser semelhante:
      /////////////////////////////////////////////////////////////////////// 
      // 
      // 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 o recurso de versão do ficheiro MyProject.rc e cole-o no ficheiro MyProject.rc2 abaixo do comentário "Adicionar editada manualmente recursos aqui." Para obter informações sobre o que significa cada um dos campos de recurso, consulte a declaração de recurso VERSIONINFO na ajuda.
  2. Substitua os dados FILEVERSION e PRODUCTVERSION macros FILEVER e PRODUCTVER. Do mesmo modo, substitua os dados de cadeia FileVersion e ProductVersion macros STRFILEVER e STRPRODUCTVER.
  3. Adicionar um # incluir VersionNo.h imediatamente antes da instrução de recurso VS_VERSION_INFO. Agora o recurso de versão aspecto como:
    /////////////////////////////////////////////////////////////////////// 
    // 
    // 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. Crie um ficheiro cabeçalho chamado VersionNo.h no mesmo directório que o projecto. Este ficheiro conterá as seguintes instruções que são as definições de macros que utilizou no passo 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: Adicionar avanço de linha e símbolos de retorno devolvem caracteres na última linha.

    Agora, MyProject.rc ficheiro inclui MyProject.rc2 e MyProject.rc2 ficheiro inclui VersionNo.h.
  5. O conteúdo do ficheiro VersionNo.h será modificado utilizando uma macro de script do Visual Basic. A macro descrita abaixo alças o evento do Visual C++ BuildFinish modo-não irá ser desencadeado até uma compilação completa. Sempre que este código VB script for chamado, primeiro incrementa os números de versão dentro do cabeçalho de ficheiro por um valor fixo e guarda o ficheiro e fecha-a. Durante a compilação subsequente, o novo número de versão está incluído no executável.

    Para instalar e utilizar o código VB script, efectue o seguinte:

    1. Abra um ficheiro DSM (macro) existente ou crie um novo ficheiro DSM no Visual C++. Para criar um novo ficheiro, clique em Novo no menu ficheiro , seleccione Ficheiro de macro no separador ficheiros , atribua um nome e clique em OK .
    2. Cole o seguinte código VB script abaixo (um ficheiro DSM vazio não pode ser instalado no Visual C++; o passo seguinte explica instalar):
      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 é um exemplo não suportado. Pode modificá-lo para o cenário de compilação.
    3. Instale o ficheiro DSM se não estiver instalado. Para instalar, clique em ' Personalizar ' no menu Ferramentas , clique no separador suplementos e ficheiros de macro , procure e seleccione o ficheiro DSM e clique em Fechar .
  6. Seleccione Criar MyProject.exe menu criar . Depois de concluir a compilação, abra o ficheiro VersionNo.h. Irá conter as seguintes instruções:
    #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"
    						
    se criar o código novamente, estas informações de versão na incluído no executável e as informações sobre a versão são incrementadas. É possível introduzir algum código na macro descrito anteriormente para evitar sucessivamente incrementado números de versão se a compilação produzida erros.

Referências

Para mais informações sobre o modelo de objecto Visual C++ consulte o tópico seguinte na MSDN library:
http://msdn.microsoft.com/en-us/library/aa712880(VS.71).aspx

Para obter mais informações sobre scripts de VB macros, consulte o tópico seguinte na MSDN library:
http://msdn.microsoft.com/en-us/library/aa247202(VS.60).aspx

Para mais informações sobre linguagem VB script, consulte o tópico seguinte na biblioteca da MSDN:
http://msdn.microsoft.com/en-us/library/d1wf56tt(vs.71).aspx

Para obter mais informações sobre a instrução de recurso do Visual C++ VERSIONINFO, consulte o tópico seguinte na MSDN library:
http://msdn.microsoft.com/en-us/library/aa381043.aspx

Propriedades

Artigo: 237870 - Última revisão: 2 de setembro de 2005 - Revisão: 3.2
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palavras-chave: 
kbmt kbautomation kbdevstudio kbhowto kbide kbscript kbvcobj KB237870 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 237870

Submeter comentários

 

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