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