![]() |
Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Hallo zusammen,
Uwe Raabe hatte im engl. Forum eine mir unbekannte Funktion aufgezeigt. Im Projekt Manager eine Build-Gruppe anlegen um dann z.B. ein 32 Bit- und ein 64 Bit-Compilat mit nur einem Mausklick zu erzeugen. Cool! ![]() Was ich jetzt noch suche, dass die Build-Nummer aus den Projekt-Optionen per Code oder "irgendwie" anders autom. anhand eines Schemas (2stelliges Jahr, 2stellige Kalenderwoche, Wochentag) erzeugt wird. Für heute also 21403. Das würde meinen Ablauf einfacher und sicherer machen. Gibt es da eine Möglichkeit? Vielen Dank im Voraus! |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Mit Bordmitteln geht das zumindest nicht.
|
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Hallo,
du könntest dir ein kleines Programm schreiben, das deine dproj-Datei entsprechend ändert. Das bindest Du dann als Prebuild ein. ![]() Wie IDE damit klarkommt, wirst Du ja dann sehen. Du könntest dir auch Batch-Datei schreiben, die Bildnummer setzt und danach Delphi startet. |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Hallo,
wenn man den richtigen Such-Begriff serviert bekommt, könnte ich wohl eine Lösung finden ;-) Mit den Build-Events hatte ich mich noch gar nicht beschäftigt. Muss heute Abend mal schauen ob sich hoika's Vorschlag umsetzen lässt. Das wäre ja super. Vielen Dank! :dp: |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Zitat:
Mit einem BeforeCompileExperten für die IDE lässt sich das mit Sicherheit machen. Mit dem kann man die entsprechenden Infos in die .dof schreiben und der Compiler kann dann die gewünschten Infos in die Exe übernehmen. Grundgerüst dazu siehe hier: ![]() Im BeforeCompile kommt man an die Projektoptionen, sowas in der Art:
Delphi-Quellcode:
Zumindest unter Delphi 7 funktioniert das. Neuer Delphis? Ausprobieren ;-)
Project.ProjectOptions.Values['Build'] := Project.ProjectOptions.Values['Build'] + 1;
if Project.ProjectOptions.Values['Build'] > 999 then begin Project.ProjectOptions.Values['Build'] := 0; Project.ProjectOptions.Values['Release'] := Project.ProjectOptions.Values['Release'] + 1; end; if Project.ProjectOptions.Values['Release'] > 999 then begin Project.ProjectOptions.Values['Release'] := 0; Project.ProjectOptions.Values['MinorVersion'] := Project.ProjectOptions.Values['MinorVersion'] + 1; end; if Project.ProjectOptions.Values['MinorVersion'] > 999 then begin Project.ProjectOptions.Values['MajorVersion'] := Project.ProjectOptions.Values['MajorVersion'] + 1; Project.ProjectOptions.Values['MinorVersion']; end; Project.ProjectOptions.ModifiedState := True; Die entsprechenden Werte nun nach der gewünschten Logik dort einzufügen, dürfte kein (unlösbares) Problem sein. |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Zitat:
|
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
so, ich habe den spannenden Ansatz von Delphi.Narium versucht umzusetzen.
Delphi-Quellcode:
Package installiert. Alles OK.
PROCEDURE TBeforeCompile.BeforeCompile( CONST Project: IOTAProject; IsCodeInsight: Boolean; VAR Cancel: Boolean );
VAR // sl: TStringList; lw_my_Build_Number: Word; BEGIN IF NOT IsCodeInsight THEN BEGIN lw_my_Build_Number := StrToIntDef( FormatDateTime( 'YY', Now ) + RightStr( '0' + IntToStr( WeekOfTheYear( Now ) ), 2 ) + IntToStr( DayOfTheWeek( Now ) ), 11111 ); Project.ProjectOptions.Values['Build'] := lw_my_Build_Number; Project.ProjectOptions.ModifiedState := True; ShowMessage( 'Before_Compile_erfolgreich ' + IntToStr( lw_my_Build_Number ) ); END; END; Wenn ich jetzt ein Projekt compiliere, schlägt auch die Message "Before_Compile_erfolgreich 21404" auf! Bis hierhin sieht für mich also alles in Ordnung aus. Leider steht in der Build-Nummer nicht mein Wert, sondern noch der zu vorige, alte Wert. Hat da noch jemand eine Idee warum das Setzen der Build-Number nicht funktioniert? |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Zitat:
Du kannst aber mit
Delphi-Quellcode:
auf die richtigen Werte zugreifen.
(Project.ProjectOptions as IOTAProjectOptionsConfigurations).ActiveConfiguration
|
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Vielen Dank, Uwe!
Ich hatte es nun probiert mit
Delphi-Quellcode:
Hab aber nicht verstanden, warum SetValue() als 2. Parameter ein TString erwartet. Ich hätte eher gedacht ein String oder Word.
( Project.ProjectOptions AS IOTAProjectOptionsConfigurations ).ActiveConfiguration.SetValues( 'VerInfo_Build', s );
Ich musste nun aber auch feststellen, dass wenn in diesem OTAPI-Experten ein Fehler auftritt, es dann richtig "kracht" und es wird sehr schwer für mich diesen Fehler dann im Projekt zu finden. (Abstrakter Fehler) Daher werde ich wohl morgen eher hoika's Vorschlag folgen. Vielen Dank nochmal an alle! :dp: |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Zitat:
|
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Zitat:
Ich bekomme es aber leider nicht hin über
Delphi-Quellcode:
die Build-Nummer zu setzen.
SetValues()
Delphi-Quellcode:
Ich bin mir ziemlich sicher, dass ich
( Project.ProjectOptions AS IOTAProjectOptionsConfigurations ).ActiveConfiguration.SetValues( 'VerInfo_Build', s )
Delphi-Quellcode:
falsch anwende/ verstehe.
SetValues()
Ich finde aber auch nichts zum Nachlesen. |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
SetValues ist für Properties gedacht, die eine Stringlist repräsentieren. In deinem Fall solltest du
Delphi-Quellcode:
oder
Value[sVerInfo_Build]
Delphi-Quellcode:
zuweisen (die Stringkonstanten stehen in CommonOptionStrs).
AsInteger[sVerInfo_Build]
|
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Hallo Uwe,
erst einmal vielen Dank für dein Geduld! Leider bekomme ich es mit
Delphi-Quellcode:
nicht hin.
( Project.ProjectOptions AS IOTAProjectOptionsConfigurations ).ActiveConfiguration.Value[sVerInfo_Build { uses CommonOptionStrs }] := IntToStr(lw_my_Build_Number);
Es kommt die Fehlermeldung: Zitat:
|
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Hallo,
der OTAPI Expert zum Setzen der Build-Number nach meinem Schema funktioniert nun (und noch weitere Sachen :-))! Siehe Post #13, das ist dort korrekt. Ich hatte an einer anderen Stellen einen Fehler eingebaut, den ich nicht auf Anhieb gefunden hatte. Vorsichtshalber habe ich auch eigene Try-Except-Meldungen eingebaut, damit es im Falle eines Fehlers sofort ersichtlich ist, dass der Fehler aus dem OTAPI-Expert kommt und nicht aus dem eigentlichen Projekt. Allen ein schönes Wochenende! :dp: |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Hallo zusammen,
nun habe ich noch ein Phänomen mit dem OTAPI-Experten. - Die Build-Nr. wird *immer* mit dem OTAPI-Experten in den Projektoptionen gesetzt! Fein! :-) - Bei den meisten Projekten wird die Build-Nr. auch in die Exe übernommen. Aber eben nicht bei allen Projekten (gefühlt bei größeren Projekten nicht), obwohl die richtige Build-Nr. ja *immer* in den Projektoptionen steht! - Erst wenn ich bei den Projektoptionen dort explizit auf den Button "Speichern" gehe, wird die Build-Nr. auch in die Exe übernommen. Ich habe schon einiges versucht aber nichts hatte geholfen.
Delphi-Quellcode:
PROCEDURE TBeforeCompile.BeforeCompile( CONST Project: IOTAProject; IsCodeInsight: Boolean; VAR Cancel: Boolean );
VAR ls_my_Build_Number: STRING; BEGIN IF NOT IsCodeInsight THEN BEGIN TRY ls_my_Build_Number := FormatDateTime( 'YY', Now ) + RightStr( '0' + IntToStr( WeekOfTheYear( Now ) ), 2 ) + IntToStr( DayOfTheWeek( Now ) ); ( Project.ProjectOptions AS IOTAProjectOptionsConfigurations ).ActiveConfiguration.AsInteger[sVerInfo_Build { uses CommonOptionStrs } ] := StrToIntDef( ls_my_Build_Number, 99999 ); sleep( 2000 );{ TODO 2 -oJS -cwichtig : Test, muss entfernt werden } Project.Refresh (True); { TODO 2 -oJS -cwichtig : Test, muss entfernt werden } Project.ProjectOptions.ModifiedState := True; sleep( 2000 );{ TODO 2 -oJS -cwichtig : Test, muss entfernt werden } EXCEPT ShowMessage( 'Dieser Fehler kommt aus dem OTAPI-Experten für das Erstellen der Build-Nr. in den Projektoptionen!' ); END; END; END; Hat jemand hier noch einen Ansatz woran das liegen könnte? Vielen Dank schon mal vorab! |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Hab' mir was ähnliches für Delphi 7 gebaut.
Dort muss zusätzlich (zum eigene Beforecompileexperten) in den Projektoptionen Versionsinfo in das Projekt übernehmen und Buildnummer automatisch erhöhen aktiviert sein. Wie das bei aktuellen Delphis aussieht, weiß ich nicht. |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für den Hinweis, Delphi.Narium
Das hatte ich schon alles ausprobiert. Leider kein Erfolg, egal was ich unter "Optionen für Build-Nr." festlege. "Versionsinformationen in das Projekt übernehmen" ist angehakt. |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Wird nicht gespeichert oder wird (eventuell unbemerkt) garnicht aufgerufen?
Gibt es einen Unterschied zwischen F9 und Strg+F9? Der IOTAModuleServices müsste eine Funktion SaveAll haben, wenn Du den Aufruf noch mit in Dein BeforeCompile hineinbringen könntest, müsste das einem Betätigen von "Alles speichern" entsprechen. Die einzige Literatur, die das "SaveAll" erwähnt und die ich dazu gefunden habe, ist für Delphi 6 und in Spanisch: ![]() Oder ![]() In der (eingebetteten) PDF nach ACCESSING THE IDE suchen und dann analog zu
Delphi-Quellcode:
mal mit
// check if the BorlandIDEServices global variable is assigned
if Assigned(BorlandIDEServices) then begin // access the IOTAModuleServices interface implemented in BorlandIDEServices and call CloseALL to close all modules (BorlandIDEServices as IOTAModuleServices).CloseAll; end;
Delphi-Quellcode:
versuchen.
// check if the BorlandIDEServices global variable is assigned
if Assigned(BorlandIDEServices) then begin // access the IOTAModuleServices interface implemented in BorlandIDEServices and call SaveALL to save all modules (BorlandIDEServices as IOTAModuleServices).SaveAll; end; Keine Ahnung, ob das was bringt :-( |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Die Versionsressource findest du in der *.res des Projekts (ich glaub in der *.dres war sie nicht nochmal drin).
Und diese Ressource ist das, was einkompiliert wird. Kann sein, dass diese Ressource beim Ändern über die OTA nicht aktualisiert wird, wenn die "Kopie" in der .DPROJ geändert wird, was aber schon bissl buggig wäre. Kannst ja mal nach meinen Antworten im Forum suchen .... irgendwo war da was (detailierter beschrieben) * ich hab im Projekt die Versions-Info deaktiviert * bei den Projekten, wo es nicht automatisch ging, mit einen Ressourcen-Editor die .RES bearbeitet und diese Ressource nochmal gelöscht * dann wird nun eine eigene .RC erstellt, mit der Versionsressource * diese .RC wird zur .RES kompiliert * und am Ende mit einem {$R meine.res} ins Projekt eingebunden * * innerhalb der DPR/DPK (niemals PAS) könnte man auch {$R meine.res meine.rc} verwenden, dann würde automatisch kompiliert (klappt aber selten/nie, wenn über MSBUILD) RC mit aktuellen Versionsinfos zusammenbauen (bei uns inkl. der Revision vom SVN GIT) und das Compilieren macht der FinalBuilder, aber ist ja egal wer es macht Von Michael Puff (ehamals der Luckie im Forum) gab es auch ein Consolenprogramm, um die Version direkt in der Projekt-RES zu ändern. ![]() |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Hallo,
der Hinweis auf das PDF war gut, Delphi.Narium! Vielen Dank. Man findet nicht viel zum Nachlesen. Gefühlt habe ich alles ausprobiert. Nichts hat mein Problem gelöst. Aber: Wenn ich das Projekt zuerst erzeuge (Umschalt+F9) und danach compiliere (Strg+F9), dann funktioniert es! Andersrum geht es nicht oder nur compilieren. Lässt sich daraus vllt. etwas ableiten? |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Ja, da lässt sich was draus ableiten.
Die Buildnummer wird nur beim "Neubauen" hochgezählt, nicht aber beim Kompilieren. Bei Umsch+F9 müssen die Konfigurationsdateien des Projektes gespeichert werden, damit die dort gemachten Änderungen (wie ebene die automatisch erhöhte Buildnummer) auch vom Compiler berücksichtigt werden können. Beim Kompilieren mit Strg+F9 ist das aber nicht erforderlich und deshalb läuft Dein BeforeCompile-Experte (vermutlich) ins Leere. |
AW: Projekt -> Optionen: Build-Nr. autom. setzen anhand eines Schemas
Mir war so, als wenn es auch was für die Projekt-RES gab, aber ich fand grade nur
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz