Obecnie do tworzenia aplikacji używamy Delphi 2009 i GIT. Skonfigurowaliśmy skrypt prekompilacji, aby wygenerować numer wersji i identyfikator kompilacji przy użyciu informacji z git i skompilować to jako zasób, który jest zawarty w projekcie. Problem polega na tym, że ten skrypt nie działa podczas zwykłej kompilacji. Oznacza to, że inni programiści mogą skończyć z rozbieżnością między rzeczywistym numerem wersji a numerem w zasobie (szczególnie podczas przełączania oddziałów w git).

Ponieważ używamy naszego oprogramowania do wykonywania niektórych krytycznych obliczeń, chcielibyśmy użyć tego identyfikatora kompilacji do odtwarzania obliczeń i śledzenia problemów.

Poza próbą zmuszenia moich programistów do częstego naciskania klawisza Shift-F9, w jaki sposób mogę zapewnić, że skrypt prekompilacji zostanie uruchomiony, gdy jest to konieczne (najlepiej przy każdej kompilacji)?

Jason.

AKTUALIZACJA: To prawda, że ​​skrypt przed kompilacją jest uruchamiany przy każdej kompilacji. Problem polegał na tym, że spodziewałem się uzyskać inny wynik naciskając F9 po utworzeniu tagu w git, mimo że żaden kod się nie zmienił.

5
boileau 1 czerwiec 2011, 12:39
Moje akcje przed kompilacją uruchamiają każdą kompilację. Nie potrafię sobie wyobrazić, dlaczego twój nie.
 – 
David Heffernan
1 czerwiec 2011, 16:17
Cóż, kiedy kompiluję/uruchamiam program naciskając F9, informacje o wersji są często nieaktualne. Shift-F9 zawsze to naprawia. Przypuszczam, że mógłbym być bardziej rygorystyczny, ale prawdopodobnie rozsądne jest również założenie, że partia prekompilacji jest właśnie tym… preBUILD, a zatem jest uruchamiana tylko podczas jawnego kompilowania.
 – 
boileau
2 czerwiec 2011, 00:58

2 odpowiedzi

Najlepsza odpowiedź

Akcje przed kompilacją są uruchamiane przed każdą kompilacją.

W komentarzu stwierdzasz, że akcje czasami nie są uruchamiane po naciśnięciu klawisza F9. Ma to sens, ponieważ F9 lub Run wywołuje kompilację tylko wtedy, gdy uzna się, że źródło uległo zmianie.

Wtyczka powiadamiająca BeforeCompile będzie zachowywać się dokładnie w ten sam sposób. Twoim rozwiązaniem jest upewnienie się, że kompilujesz przed uruchomieniem za pomocą Ctrl + F9.

0
David Heffernan 2 czerwiec 2011, 01:16

Rozwiązaliśmy podobny problem, pisząc niestandardową wtyczkę IDE, która korzysta z interfejsu IOTAIDENotifier50. W szczególności przy użyciu metody BeforeCompile, aby przetestować niektóre wymagane ustawienia projektu, a także wygenerować dynamiczne informacje o wersji (zasób VERSIONINFO). Jest wywoływany dla każdego typu kompilacji (kompilacji i kompilacji). Generujemy również unikalny numer seryjny pliku exe i rejestrujemy wszystko, co pomaga nam śledzić problemy i jest podobne do Twojego skryptu. Dla kompletności zrobiliśmy to tylko w Delphi 2007 i Delphi XE.

3
Steve 1 czerwiec 2011, 15:27
Brzmi to jak coś, na co sam nie mam zasobów (czasu). Czy zechciałbyś udostępnić jakiś kod źródłowy ze swojej wtyczki?
 – 
boileau
2 czerwiec 2011, 00:55
Chociaż nie rozwiąże to twojego problemu, napisanie takiego dodatku jest banalnie proste. Zanim dodano działania przed i po kompilacji, zrobiłem dokładnie to samo, co Steve i jest to naprawdę proste.
 – 
David Heffernan
2 czerwiec 2011, 01:18