如何在 Visual C++ 每次建置後遞增版本資訊

文章翻譯 文章翻譯
文章編號: 237870 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

Visual C++ 就沒有為自動累加之後每次建置專案的版本資源資訊的功能。本文將告訴您,提供這類功能的一種方法。

其他相關資訊

您可以撰寫程式來修改資源編譯器 (.rc) 檔案,而非使用此處所述的步驟。不過,RC 檔是在 Visual C++ 的控制之下。Visual C++ 修改時儲存,RC 檔,並且這可能會影響版本資源。本節所述的方法可以套用到任何 Visual C++ 專案。這個範例會使用 MFC 專案。

建立使用 [MFC (EXE) Win32 應用程式] 將新的專案,並呼叫它 MyProject。MyProject 會有包含 MyProject.rc2 的 MyProject.rc 檔案。.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. 取代巨集 FILEVER 和 PRODUCTVER FILEVERSION 和 PRODUCTVERSION 資料。同樣地,取代巨集 STRFILEVER 和 STRPRODUCTVER FileVersion 和 ProductVersion 字串資料。
  3. 加入一個 # 包括 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 - 上次校閱: 2005年9月2日 - 版次: 3.2
這篇文章中的資訊適用於:
  • 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
關鍵字:?
kbmt kbautomation kbdevstudio kbhowto kbide kbscript kbvcobj KB237870 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。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