Wie Sie Versionsinformationen nach jedem Build in Visual C++ erhöhen

Artikel-ID: 237870 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Zusammenfassung

Visual C++ kein Feature automatisch die Ressourceninformationen Version des Projekts nach jedem Build erhöht. Dieser Artikel beschreibt eine Möglichkeit, eine solche Funktion bereitstellen.

Weitere Informationen

Schreiben Sie ein Programm zum Ändern der Ressourcen-Compiler (.rc)-Datei anstelle der beschriebenen Schritte hier. Allerdings ist die RC-Datei unter der Kontrolle der Visual C++. Visual C++ ändert die RC-Datei beim Speichern, und dies beeinträchtigen der Versionsressource. Das in diesem Abschnitt beschriebenen Verfahren kann alle Visual C++-Projekt angewendet werden. In diesem Beispiel wird ein Projekt Microsoft Foundation Classes verwendet.

Erstellen Sie ein neues Projekt unter Verwendung der MFC (EXE) Appwizard und rufen Sie es MyProject . MyProject haben eine Datei MyProject.rc MyProject.rc2 enthält. Die RC2-Datei ist für benutzerdefinierte Ressourcen vorgesehen. Gehen Sie folgendermaßen des MyProject Versionsinformationen nach jedem Build erhöht vor:
  1. Entfernen Sie die Versionsressource aus der RC-Datei und in die RC2-Datei:

    1. Öffnen Sie MyProject.rc und MyProject.rc2 (im Ordner "Auflösung" gefunden), in einem Texteditor. Um Visual C++-Editor verwenden, klicken Sie im Menü Datei auf Öffnen , und wählen Sie Text in der Liste Öffnen als für die Datei MyProject.rc.
    2. Suchen Sie die Version Ressource Anweisungen in MyProject.rc. Es sollte etwa folgendermaßen aussehen:
      /////////////////////////////////////////////////////////////////////// 
      // 
      // 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. Die Versionsressource aus der Datei MyProject.rc Ausschneiden und in der MyProject.rc2-Datei unter dem Kommentar "Add bearbeitet manuell Ressourcen hier." Einfügen Finden Sie Informationen dazu, was bedeutet, jeweils die Felder in der Ressource dass unter der VERSIONINFO-Ressource-Anweisung in der Hilfe.
  2. Ersetzen Sie die FILEVERSION und PRODUCTVERSION-Daten mit Makros FILEVER und PRODUCTVER. Ersetzen Sie entsprechend die FileVersion und ProductVersion Zeichenfolge-Daten mit den Makros STRFILEVER und STRPRODUCTVER.
  3. Fügen Sie eine # VersionNo.h unmittelbar vor der VS_VERSION_INFO Ressource-Anweisung enthalten. Jetzt die Versionsressource aussieht wie:
    /////////////////////////////////////////////////////////////////////// 
    // 
    // 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. Erstellen Sie eine Headerdatei in demselben Verzeichnis wie das Projekt VersionNo.h aufgerufen. Diese Datei enthält die folgenden Anweisungen, die die Definitionen für Makros, die in Schritt 2 verwendet werden:
    #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"
    						
    Hinweis: Add Zeilenvorschub- und Wagenrücklaufzeichen Zeichen in der letzten Zeile zurückgeben.

    Nun, MyProject.rc-Datei enthält MyProject.rc2 und MyProject.rc2 Datei VersionNo.h enthält.
  5. Den Inhalt der Datei VersionNo.h werden mit einem Makro Visual Basic-Skript geändert. Das Makro aufgeführten behandelt das Visual C++-BuildFinish-Ereignis, damit es nicht ausgelöst wird, bis ein Build abgeschlossen ist. Wenn in diesem VBScript-Code aufgerufen wird, es erhöht die Versionsnummern in der Headerdatei zuerst, um einen festen Betrag, und es speichert die Datei und schließt es. Während eines nachfolgenden Builds ist die neue Versionsnummer in der ausführbaren Datei enthalten.

    Installieren und verwenden Sie den VBScript-Code, gehen Sie folgendermaßen vor:

    1. Öffnen einer vorhandenen Datei DSM (Makro) oder erstellen Sie eine neue DSM-Datei in Visual C++. Erstellen Sie eine neue Datei, klicken Sie im Menü Datei auf neu , Makrodatei auf der Registerkarte Dateien auswählen, geben Sie einen Namen ein, und klicken Sie auf OK .
    2. Fügen Sie den folgenden VBScript-Code unten (eine leere DSM-Datei kann nicht in Visual C++ installiert werden; die nächste Schritt erläutert installieren):
      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
      								
      Hinweis: dieser Code ist ein nicht unterstütztes Beispiel. Sie können für Ihr Szenario Build ändern.
    3. Installieren Sie die DSM-Datei, wenn es nicht bereits installiert ist. Installieren möchten, klicken Sie im Menü Extras auf Anpassen , klicken Sie auf die Registerkarte Add-Ins und Makrodateien , Durchsuchen Sie, um die DSM-Datei auszuwählen und klicken Sie auf Schließen .
  6. Im Build MyProject.exe erstellen auswählen. Nachdem das Build abgeschlossen ist, öffnen Sie die VersionNo.h-Datei. Es werden die folgenden Anweisungen enthalten:
    #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"
    						
    Wenn Sie den Code erneut, diese Versionsinformationen in in der ausführbaren Datei enthalten erstellen, und die Versionsinformationen wird erhöht. Stellen Sie vor einigen Code in das Makro beschriebenen erhöht Versionsnummern verhindern, wenn das Build Fehler erzeugt.

Informationsquellen

Weitere Informationen auf dem Visual C++-Objektmodell finden Sie unter folgende Thema in der MSDN-Bibliothek:
http://msdn.microsoft.com/en-us/library/aa712880(VS.71).aspx

Weitere Informationen zur Verwendung von VBScript-Makros finden Sie unter folgende Thema in der MSDN-Bibliothek:
http://msdn.microsoft.com/en-us/library/aa247202(VS.60).aspx

Weitere Informationen auf VBScript-Sprache finden Sie unter folgende Thema in der MSDN-Bibliothek:
http://msdn.microsoft.com/en-us/library/d1wf56tt(vs.71).aspx

Weitere Informationen auf der Visual C++-VERSIONINFO-Ressource-Anweisung finden Sie unter folgende Thema in der MSDN-Bibliothek:
http://msdn.microsoft.com/en-us/library/aa381043.aspx

Eigenschaften

Artikel-ID: 237870 - Geändert am: Freitag, 2. September 2005 - Version: 3.2
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbmt kbautomation kbdevstudio kbhowto kbide kbscript kbvcobj KB237870 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 237870
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns