Muszę ustawić wersję mojego projektu delphi na taki sam jak inny projekt (nie delphi) jako część skryptu budowania. Czy istnieje sposób kontrolowania numeru wersji bez przechodzenia przez IDE, na przykład parametr wiersza poleceń kompilatora lub coś podobnego? Dziękizmiana numeru wersji w czasie kompilacji
Odpowiedz
Dołącz taką linię
{$R 'version.res'}
w projekcie. I utwórz plik version.rc z informacjami o wersji. Będziesz musiał sam zbudować zasób w starszych wersjach Delphi, używając brcc32. W nowszych wersjach Delphi możesz użyć , aby IDE skompilowało go automatycznie.
Najprostszym version.rc będzie wyglądać mniej więcej tak:
1 VERSIONINFO
FILEVERSION 9999, 9999, 99, 18048
PRODUCTVERSION 9999, 9999, 99, 18048
FILEOS 0x00000004L // comment: VOS_WINDOWS32
FILETYPE VFT_APP
{
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x409, 0x4E4 // comment: 0x4E4 = 1252
}
BLOCK "StringFileInfo"
{
BLOCK "040904E4"
{
VALUE "CompanyName", "Company Name\0"
VALUE "FileVersion", "9999.9999.99.18048\0"
VALUE "LegalCopyright", "Copyright \0"
VALUE "ProductName", "Product Name\0"
VALUE "ProductVersion", "9999.9999.99.18048\0"
VALUE "Homepage", "http://www.mydomain.com\0"
}
}
}
Aby uzyskać więcej informacji, zapoznaj się z MSDN na strukturze VERSIONINFO.
+1 za to rozwiązanie, z którego korzystam, ale musisz upewnić się, że usuniesz version.res inaczej zmiany do wersji.rc nie zostaną zauważone przez linker. –
@BrianFrost: jakiej wersji Delphi używasz? Nigdy nie miałem tego problemu. A wyłączyłeś opcję "include version info" w opcjach projektu? –
Mój błąd. Widzę, że musiałem usunąć * .res, kiedy przeszedłem do używania #include w * .rc do numerowania vernsion, więc nie modyfikowałem * .rc tylko mojego pliku włączającego, który ma sam numer wersji. –
Marjan podaje znakomitą odpowiedź powyżej, ale moja odpowiedź trochę bardziej. Rozważmy ten plik RC:
VS_VERSION_INFO VERSIONINFO
#include "..\Ver_Num_Application.txt"
#define APPLICATION_NAME "My amazing project\0"
#define VER_NUM_ARTWORKS 4
#include "..\Libraries\Paslib32\Ver_Num_Library.txt"
#define COMPANY_NAME "My company\0"
FILEVERSION VER_NUM_ARTWORKS, VER_NUM_LIBRARY, VER_NUM_APPLICATION, 1000
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x9L
#else
FILEFLAGS 0x8L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", COMPANY_NAME
VALUE "FileDescription", APPLICATION_NAME
VALUE "LegalCopyright", "Copyright (C) "COMPANY_NAME
VALUE "ProductName", APPLICATION_NAME
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
Korzyść w użyciu kilka oświadczeń #include jest to, że można pozostawić plik RC sam, a następnie po prostu zmodyfikować (lub nawet automatycznie generować) i * .txt zawierają pliki, które wyglądają jak :
Ver_Num_Application.txt:
#define VER_NUM_APPLICATION 6
Ver_Num_Library.txt:
#define VER_NUM_LIBRARY 156
Zauważ, że teraz trzeba usunąć * .res plików przed uruchomieniem swój build zmusić łącznik zregenerować je z (ewentualnie zmienione) numery wersji.
Czy nie byłoby łatwiej po prostu {$ R ...} innej pary version.res/rc w dpr używającej warunkowej definicji? IE '{$ ifdef DEBUG} {$ R version.res debugversion.rc} {$ ELSE} {$ R version.res version.rc} {$ ENDIF}' To nie tak, że inne informacje często będą się zmieniać ... –
Prawdziwe. Chyba chciałem mieć "standardowy" plik RC dla wszystkich moich projektów i plik z rozszerzeniem * .txt, który otwiera się przy pomocy notatnika. –
Aaww come'on Brian, "standardowy" plik, który mogę zrozumieć, ale plik txt? Jestem pewien, że wiesz jak powiązać pliki .RC z Notatnikiem jako domyślnym edytorem? ;-) –
- 1. Odwołaj się do numeru kompilacji lub numeru wersji w kodzie
- 2. Wykrywanie wersji C# w czasie kompilacji
- 3. Automatyczne zwiększanie numeru kompilacji w projekcie Java
- 4. Co robi zmiana numeru config.assets.version?
- 5. przesunięcie w czasie kompilacji
- 6. TeamCity - odwołanie do numeru kompilacji z innej konfiguracji kompilacji
- 7. Winformy: pobieranie numeru wersji publikacji?
- 8. Specjalizacja typu w czasie kompilacji
- 9. jeśli/else w czasie kompilacji?
- 10. ocenia wyrażenie w czasie kompilacji
- 11. Stałe szeregowe w czasie kompilacji
- 12. TeamCity do odczytu i aktualizacji numeru wersji z pliku wersji
- 13. Zmiana numeru indeksu ramki danych
- 14. Zmiana pod kursorem zmiana wersji
- 15. Zmiana koloru wiersza JList w czasie wykonywania
- 16. Zmiana numeru telefonu w emulatorze - rozwój Android
- 17. Uzyskiwanie dostępu do numeru wersji kompilacji w skrypcie Powershell podczas budowania TFS
- 18. Zmiana wersji Carthage Swift
- 19. Terminologia Java: Dlaczego w czasie kompilacji wystąpił błąd, a nie wyjątek w czasie kompilacji?
- 20. Jak sprawdzić numer wersji Gradle w pliku kompilacji?
- 21. Jenkins/Hudson - dostęp do aktualnego numeru kompilacji?
- 22. Uzyskiwanie numeru wersji SVN do programu automatycznie
- 23. Usuwanie kodu z wersji kompilacji .NET
- 24. Aktualizowanie numeru wersji projektu na git push
- 25. wykrywanie typedef w czasie kompilacji (metaprogramming szablonu)
- 26. Błąd Studio Studio Gradle w czasie kompilacji
- 27. Jak wymienić element krotki w czasie kompilacji?
- 28. pośrednik - ścieżka atutem CDN w czasie kompilacji
- 29. Druk sizeof (T) w czasie kompilacji
- 30. C++ argumenty funkcji sprawdzania kompilacji w czasie
Dlatego należy przestać pozwalać kontrolce IDE na zasoby wersji i skryptować generowanie własnych zasobów wersji jako działanie poprzedzające kompilację. –
@david Czy masz instrukcję, jak to zrobić? –
Spójrz na coś takiego jak FinalBuilder, który pozwala ustawić wszystkie pliki EXE do tego samego numeru kompilacji i zapewnić spójne parametry kompilacji itp. – mj2008