Как увеличить сведения о версии после каждой сборки в Visual C++

Переводы статьи Переводы статьи
Код статьи: 237870 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

Visual C++ не поддерживает функции автоматического приращения сведений о ресурсе версий проекта после каждой сборки. В данной статье описывается один из способов предоставления таких функций.

Дополнительная информация

Можно написать программу, чтобы изменить файл ресурсов (.rc) компилятор вместо действия, описанные здесь. Тем не менее RC-файл находится под контролем Visual C++. Visual C++ изменяет RC-файла при сохранении, и это может повлиять на ресурс версии. Подход, описанный в этом разделе могут применяться к любому проекту Visual C++. В этом примере используется проект классов.

Создание нового проекта с помощью Appwizard MFC (EXE) и вызывать его Мой проект. Мой проект будет файл MyProject.rc, который включает в себя MyProject.rc2. RC2-файл предназначен для определяемых пользователем ресурсов. Выполните следующие действия для увеличения его MyProject сведения о версии после каждой сборки.
  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. Замените данные FILEVERSION и PRODUCTVERSION макросы FILEVER и PRODUCTVER. Аналогичным образом замените макросы, STRFILEVER и STRPRODUCTVER FileVersion и ProductVersion строковых данных.
  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. Содержимое файла VersionNo.h будет изменен с помощью макроса Visual Basic Script. Макрос ниже дескрипторы событий Visual C++ BuildFinish так, чтобы она не запускается до завершения построения. При каждом вызове этого кода сценарий VB сначала увеличивает номера версии в файле заголовка на фиксированную сумму, а затем она сохраняет файл, а затем закрывается. При последующем построении номер новой версии включается в исполняемый файл.

    Чтобы установить и использовать сценарий VB кода, выполните следующие действия:

    1. Открытие существующего файла DSM (макрос) или создать новый файл DSM в Visual C++. Чтобы создать новый файл, нажмите кнопку Новый В меню Файл Выберите пункт Файл макроса В меню Файлы на вкладке, присвойте ему имя и нажмите кнопку ОК.
    2. Вставьте следующий сценарий VB код ниже (в Visual C++ невозможно установить пустой файл DSM; объясняется следующим шагом установки):
      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 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
Ключевые слова: 
kbautomation kbdevstudio kbhowto kbide kbscript kbvcobj kbmt KB237870 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:237870

Отправить отзыв

 

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