2008-10-14 2 views
11

Gibt es eine Möglichkeit, Designtime-Pakete auf einer Projektbasis auszuwählen?Laden von Delphi Designtime-Paketen auf einer Projektbasis

Pakete sind sehr nützlich in großen Projekten, um die Bauzeit akzeptabel zu halten, aber sie sind ein echtes Pita in diesen großen Projekten auch. Wenn ein Entwickler ein neues Paket hinzufügt, bricht es ab, um für alle anderen zu erstellen, bis sie das neue Paket auf ihrem Rechner installieren. Und dann gibt es Versionierung der Pakete ...

Hat also jemand eine richtige Lösung dafür? (es stört mich schon seit Jahren)

Antwort

8

Bei meinem vorherigen Job habe ich ein kleines Tool geschrieben, um uns bei der Versionierung von Paketen zu helfen. Ich sollte dieses Tool in meiner Freizeit wirklich neu erstellen und zur Verfügung stellen. Das Werkzeug war nicht schwer zu schreiben, also können Sie vielleicht so etwas selbst implementieren.

Im Grunde ist es so:

  • Subversion Repo mit allen Paketen in Unterordner. Jeder Paketordner im Repo hatte die gleichen Unterordner: Lib (für DCUs), Quelle, Hilfe (falls erforderlich)
  • Im Stammverzeichnis des Repos befindet sich das Tool zusammen mit einer XML-Datei.
  • Die XML-Datei gab alle erforderlichen Informationen für jedes Paket an: welcher Ordner enthielt DCUs, welcher Ordner enthielt die Quelle, welcher Befehl für die Hilfe ausgeführt werden musste.
  • Das Tool liest das XML ein und zeigt eine Checkliste aller verfügbaren Pakete an. Installierte Pakete (gelesen von der BDS-Registrierung) sind markiert markiert.
  • Der Benutzer kann auswählen, welche Pakete installiert/deinstalliert werden sollen.
  • Das Tool fügt die erforderlichen Schlüssel in der BDS-Registrierung hinzu oder entfernt sie. Es fügt den DCU/Lib-Ordner in den Suchpfad der IDE ein, fügt den Quellordner zum IDE-Suchpfad hinzu und registriert den help-Befehl mit einem benutzerdefinierten IDE-Experten (Dieser Experte bietet eine Erweiterung des Standard-Hilfemenüs zum Starten die Hilfe für alle installierten Pakete)
  • Das Tool würde sogar nach Konflikten und Abhängigkeiten zwischen Paketen suchen. Zum Beispiel waren sowohl Version 3 als auch 4 von Raize Components verfügbar, die nicht beide gleichzeitig aktiv sein konnten.Abhängigkeitsprüfung war für Inhouse-Komponenten nützlich, die von Turbopower AsyncPro abgeleitet (viele Komponenten im eigenen Haus auf die serielle Kommunikation über AsyncPro verlassen)

Eine mögliche Erweiterung würde in der Lage sein zu retten gewesen/laden Sie die Auswahl von Pakete und speichern diese Auswahl mit jedem Projekt, so dass nur die Pakete geladen werden können, die für ein bestimmtes Projekt benötigt werden.

Ich implementierte all dies, als das Unternehmen von Delphi 5/7 zu Delphi 2007 wechselte. Wir hatten viele Probleme mit der Versionierung von Paketen und wollten eine Möglichkeit, alle verschiedenen Pakete zu versionieren.

Dieser Ansatz bietet einige nette Vorteile:

  • Wenn Fehlerbehebungen vorgenommen werden mussten oder neue Versionen von Softwarepakete Dritter freigelassen wurden, eine Person um die Änderungen zu Subversion zu begehen hatte. Alle anderen Entwickler können einfach ein Update von Subversion durchführen und haben die neueste Version ohne Probleme.
  • Wenn neue Komponentenpakete zur Umgebung hinzugefügt werden, muss eine Person alle Dateien festschreiben, die XML-Paketliste ändern und dann können die anderen Entwickler ein Subversion-Update durchführen und das Tool zur einfachen Integration des Pakets ausführen.
  • Alle Komponenten von Drittanbietern und benutzerdefinierte In-House-Komponenten wurden jetzt einfach versioniert.
  • Durch die Einbindung der DCUs (und anderer Binaries) in den Subversion-Repo haben wir sichergestellt, dass alle Entwickler dieselbe kompilierte Version verwenden. Zuvor war es möglich, dass verschiedene Compilations unterschiedliche Einstellungen verwendeten, was dazu führte, dass sich einige Komponenten unterschiedlich verhalten.
  • Als schließlich alle anderen Entwickler Delphi 2007 installierten, wurden ihre Pakete in weniger als 10 Minuten eingerichtet (die meiste Zeit wurde alles aus dem Subversion-Repo heruntergeladen; das Tool selbst konnte 20 Pakete in weniger als 2 Sekunden installieren). Bei der manuellen Installation aller Pakete für Delphi5/7 kann es bis zu 2 Tage dauern, bis alles installiert ist.

Dies wurde für einige im Haus nicht nur allein Komponenten, inklusive der Repo auch einige der großen Komponentenpakete: Raize Komponenten, JCL/JVCL (ihre Installer verwenden anstelle des Werkzeugs obwohl), DevExpress Quantum Raster 3 und 4, TurboPower AsyncPro

+0

Das klingt sehr nützlich! Bitte stellen Sie es zur Verfügung. . . –

+0

Ja, ich würde es gerne zur Verfügung stellen. Aber ich muss es entweder von Grund auf neu erstellen (nicht so viel Spaß und ich würde viele Bugfixes aus dem Original vermissen) oder meinen früheren Arbeitgeber dazu bringen, es zu öffnen. Es lohnt sich, mit ihnen zu reden, aber ich habe immer noch gute Kontakte. – Otherside

+0

Das kommt mir sehr nahe. Ich hatte gehofft, dass so etwas schon existiert. Ich hoffe, dass Sie etwas Zeit finden, um daran zu arbeiten, da dies einer der Gründe ist, die Entwickler in andere Umgebungen zwingt. Vielen Dank. – Glenner003

6

Das ist nicht einfach zu tun. Sie können es aber mit der Verwendung eines benutzerdefinierten Registry-Hack und eine spezifische bds Verknüpfung pro Konfiguration sind Sie interessiert:

zu verwenden, erstellen Sie einfach eine neue Verknüpfung und die Befehlszeile ändern zum Beispiel passieren -rMyAlternateBDSReg. Dann nach dem ersten Mal, der Registrierungseintrag ist erstellt und sie können diese alternative Registrierung konfigurieren, die sie wollen, Pakete zu löschen, usw., ohne sich Gedanken über die Standardinstallation zu versauen.

Von codegear

Wenn Sie eine Konfiguration für jedes Projekt einrichten, können Sie dann auf die entsprechende Verknüpfung für das jeweilige Projekt starten. Es ist nicht automatisch, aber es ist besser, als alles ständig dort zu haben.

Ein schöner Nebeneffekt ist, dass die Ladezeiten verbessert werden.

0

Wir legen die Quelle für unsere Pakete in Quellcodeverwaltung zusammen mit einer Batchdatei, die sie neu erstellt. Wenn es eine Änderung in der Struktur für Pakete gibt, bauen wir sie neu auf. Dies betrifft nicht die Installation neuer Pakete, aber es gibt Registry-Hits, die dafür sorgen können, dass es möglich ist, dass wir .reg-Snippets vielleicht damit umgehen könnten.