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

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本: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 0x0LBEGIN    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    ENDEND							
    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 0x0LBEGIN    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    ENDEND					
  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 functionDim proj_pathproj_path = Split(StrReverse(FullName),"\",-1,1)Dim countcount = UBound(proj_path)Dim full_pathfull_path = ""Dim ifor i = 1 to count 	full_path = full_path & "\" & proj_path(i)nextGetProjectDir = StrReverse(full_path)End FunctionSub 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 numberselection.WordRight dsMove, countselection.WordRight dsExtend, 1Dim strstr = selection.Textstr = str + incrementbyselection.Text = strEnd SubSub 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 projectDim full_pathfull_path = GetProjectDir(ActiveProject.FullName)full_path = full_path & "versionno.h"'Open the VersionNo.h fileDocuments.Open full_path'Obtain the TextSelection objectDim selectionset selection = ActiveDocument.Selectionselection.StartOfDocument 'Increment the version informationReplaceText selection, 9, 1selection.LineDownselection.StartOfLineReplaceText selection, 9, 1selection.LineDownselection.StartOfLineReplaceText selection, 10, 1selection.LineDownselection.StartOfLineReplaceText selection, 10, 1ActiveDocument.SaveActiveDocument.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 程式庫中的]:
如需有關 VB 指令碼的巨集的詳細資訊,請參閱下列主題 MSDN 程式庫中的]:
如需有關 VB 指令碼語言的詳細資訊,請參閱下列主題 MSDN 程式庫中的]:
如需有關 Visual C++ VERSIONINFO 資源陳述式的詳細資訊,請參閱下列主題 MSDN 程式庫中的]:

警告:本文為自動翻譯

內容

文章識別碼:237870 - 最後檢閱時間:12/05/2015 15:18:20 - 修訂: 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

  • kbnosurvey kbarchive kbmt kbautomation kbdevstudio kbhowto kbide kbscript kbvcobj KB237870 KbMtzh
意見反應