Изменить номер версии во время сборки
Мне нужно установить версию моего проекта Delphi такой же, как другой проект (не Delphi), как часть сценария сборки. Есть ли способ управления номером версии без прохождения через IDE, например, параметр командной строки компилятора или что-то в этом роде? Спасибо
2 ответа
Включить строку как
{$R 'version.res'}
в вашем проекте. И создайте файл version.rc с информацией о вашей версии. Вам придется создать ресурс самостоятельно в старых версиях Delphi, используя brcc32. В новых версиях Delphi вы можете использовать
{$R 'version.res' 'version.rc'}
чтобы IDE построил его автоматически для вас.
Самый простой version.rc будет выглядеть примерно так:
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"
}
}
}
Для получения дополнительной информации, пожалуйста, обратитесь к MSDN в структуре VERSIONINFO.
Марьян дает превосходный ответ выше, но мой ответ продвигает ответ немного дальше. Рассмотрим этот 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
Преимущество использования нескольких операторов #INCLUDE состоит в том, что вы можете оставить RC-файл в покое, а затем просто изменить (или даже автоматически сгенерировать) включаемые файлы *.txt, которые выглядят следующим образом:
Ver_Num_Application.txt:
#define VER_NUM_APPLICATION 6
Ver_Num_Library.txt:
#define VER_NUM_LIBRARY 156
Обратите внимание, что теперь вы должны удалить файлы *.res перед запуском сборки, чтобы компоновщик восстановил их с (возможно, измененных) номеров версий.