Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Grund für $LIBVERSION Parameter in *.dpk Dateien?

  Alt 21. Jan 2011, 20:09
Die Frage ist wozu $LIBVERSION?
Hallo,
ich hab mal ein wenig rumprobiert Die Frage kann ich nun selbst beantworten.

Bei der Verwendung der Laufzeit Packages gibt es wie bei den *.dll Dateien (ist ja im Grunde dasselbe) die so genannte dll - Hölle.

Beispiel 1:
Wir haben 2 Anwendungen, die dasselbe Package verwenden. (A1.exe, A2.exe und P.bpl)

Wie kompilieren das Package und die 2 Anwendungen -> alles Super.
Ich installiere die 3 Dateien beim Kunden und programmiere weiter an den neuen Funktionen der 2 Anwendungen.

Nun muss eine Änderung am Package gemacht werden, da in Anwendung 1 ein Bug enthalten ist.
Dieser Bug betrifft aber nur Anwendung 1. Anwendung 2 hat schon neue Funktionalität, die noch nicht ausgeliefert werden soll.

Also kompiliere ich das Package und die Anwendung 1, liefere es meinem Kunden aus und ...

MIST!

Anwendung 1 funktioniert mit dem Package Version 2 super, aber Anwendung 1 nicht.
Anwendung 1 funktioniert nur mit dem alten Package.

Dieses Szenario ist bekannt.
Das ist auch der Grund, warum viele keine Laufzeit Packages einsetzen.
So nun zu $LIBVERSION :

Beispiel2:
Wir haben 2 Anwendungen, die dasselbe Package verwenden. (A1, A2 und P)
Aber im Package haben wir $LIBVERSION auf '1.0.0' gesetzt.
Also wieder alles kompilieren und ausliefern. (A1.exe, A2.exe und P.bpl.1.0.0)

Wir ändern das Package und passen auch $LIBVERSION an ('1.0.1')
Nach dem Kompilieren des Packages und der Anwendung 1 liefern wir folgende Dateien aus:
A1.exe und P.bpl.1.0.1

Beim Kunden liegen nun folgende Dateien im Verzeichnis:
  • A1.exe
  • A2.exe
  • P.bpl.1.0.0
  • P.bpl.1.0.1
Die Anwendung 1 benutzt das neue Package die Anwendung 2 das Alte.

SUPER. Es gibt kein Problem.

Beim Kompilieren der Anwendungen wird immer die neuste Version eingebunden.
Die requires Sektion von Packages muss auch nicht angepasst werden, da die *.dcp Datei ja ohne Versionsnummer ist. (p.dcp)
Schade nur, dass man das $LIBVERSION Tag von Hand pflegen muss. Man hätte es auch an die VERSIONINFO knüpfen können.

Nachteil:
Wenn nun 20 Änderungen des Packages ausgeliefert wurden würden in unserem Beispiel 22 Dateien im Verzeichnis liegen.
Mann muss also genau Buch führen, wann man die alten Versionen nicht mehr benötigt.
Komplizierter wird das bei 50 (teilweise voneinander abhänigigen) Packages und z. B. 20 *.exe Dateien.
Es macht also Sinn, bei einem Major Release (z.B. aus 1.2.17 wird 2.0.0) alle Package und Anwendungen zu kompilieren und die Alten komplett zu entsorgen.

Vorteil:
Es gibt keine Probleme mit falschen Packageversionen.

Fazit:
Eine gute Sache.

Also $LIBPREFIX zum kennzeichnen von Laufzeit und Designtime Packages,
$LIBSUFFIX zum kennzeichnen der Delphi Version (150 -> Delphi XE),
$LIBVERSION zum kennzeichnen der Version des Packages um Versionskonflikten zur Laufzeit aus dem Weg zu gehen.

Danke für's Lesen

mfg
MaBuSE
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat