Programmieren mit C++

Visual C++

Arbeiten mit VC++

BuildIncrementor

Wie kann man die Build-Nummer in VC++ automatisch inkrementieren?

Frage

Da VC++ keinen eigenen automatischen BuildInkrementor besitzt, leistet der nachfolgende Makrocode das Gewünschte. Dieser Code muss in eine bestehenden Makrodatei eingefügt werden, wobei ggfs. eine neue Datei zu erzeugen und ein Dummymakro einzufügen ist, damit man von VC aus Zugriff auf die Makros hat. Application_BeforeBuildStart() ist zwar ein Visual Studio-definierter Eventhandler, dessen Code im Makrofile enthalten ist, aber er wird nicht angezeigt, so dass also zumindest ein Makro vorhanden sein muss.

Das hier vorgestellte Makro wird automatisch vor dem Start eines neuen Builds aufgerufen. Es wird die RC-Datei des Projekts als Textdatei geöffnet, die Version Info Struktur gesucht und die Build-Nummer inkrementiert.

Die Suche nach der Versionsnummer erfolgt über einen regulären Ausdruck.

Lösung

 dim oDoc, sBuild, sRCFile, sOne, sTwo, iSelect, lLineNbr, bFound
 
 sRCFile = application.activeproject & ".rc"
 set oDoc = Documents.Open(sRCFile, "Text")
 
 oDoc.Selection.FindText " FILEVERSION", dsMatchCase
 lLineNbr = oDoc.Selection.CurrentLine
 
 sOne = "[0-9]+,[0-9]+,[0-9]+,"
 
 oDoc.Selection.FindText sOne, dsMatchRegExp
 
 if oDoc.Selection.CurrentLine = lLineNbr then
  sOne = oDoc.Selection
 
  sTwo = Replace(sOne, ",", ", ") 
  oDoc.Selection.CharRight
  oDoc.Selection.WordRight dsExtend
  sBuild = oDoc.Selection + 1
  oDoc.Selection = sBuild
  else 
   msgbox "Versionsnummer 1 nicht gefunden. Fehlgeschlagen."
   oDoc.Close dsSaveChangesNo
   set oDoc = nothing
   exit sub
 end if
 
 for iSelect = 2 to 4
  if iSelect = 2 then 
   bFound = oDoc.Selection.FindText(sOne)
  else
   bFound = oDoc.Selection.FindText(sTwo)
  end if
 
  oDoc.Selection.CharRight
  oDoc.Selection.WordRight dsExtend
  oDoc.Selection = sBuild
 
  if bFound = False then
   msgbox "Versionsnummer " & iSelect & " nicht gefunden. Fehlgeschlagen."
   oDoc.Close dsSaveChangesNo
   set oDoc = nothing
   exit sub
  end if
 next
 
 oDoc.Close dsSaveChangesYes
 
 set oDoc = nothing
End Sub




Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 01:24:55 von textarchiv.alojado.de