У меня есть решение с примерно 8 отдельными проектами в нем, и каждый раз, когда я делаю выпускную сборку всего решения, мне нужно убедиться, что строка версии для двоичный вывод каждого проекта одинаковый. Есть ли простой способ синхронизации раздела VS_VERSION_INFO файла ресурсов проекта?Синхронизация ресурсов версии в проектах Visual Studio C++ (Win32)
ответ
Я не знаю, что это так, как вы хотели бы пойти, но .rc
файлы позволяют включает в себя, и вы можете использовать #define
значения в версии блока
Определение номера версии в файле заголовка
#define VER_MAJOR 8
#define VER_MINOR 00
#define VER_BUILD_HI 00
#define VER_BUILD_LO 021
#define VER_FLAGS VS_FF_PRERELEASE
// The Binary form of the version numbers
#define VER_FILE VER_MAJOR, VER_MINOR, VER_BUILD_HI, VER_BUILD_LO
#define VER_PRODUCT VER_MAJOR, VER_MINOR, 0, 0
#define VER_STR(arg) #arg
// The String form of the version numbers
#define VER_FILE_STRING VALUE "FileVersion", "8.0\0"
#define VER_PRODUCT_STRING VALUE "ProductVersion", "8.0\0"
Используйте их в VS_VERSION_INFO
блоке
#include "bversion.h" //#define values in here
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILE
PRODUCTVERSION VER_PRODUCT
FILEFLAGSMASK 0x2fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "XXX\0"
VALUE "FileDescription", "YYY\0"
VER_FILE_STRING
VALUE "InternalName", "ZZZ\0"
VALUE "LegalCopyright", "© 2009 PDQ.\0"
VALUE "LegalTrademarks", "AAA\0"
VALUE "OriginalFilename", "BBB.EXE\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "CCC\0"
VER_PRODUCT_STRING
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
Ссылка на один заголовочный файл во всех проектах и изменение его перед каждой сборкой.
Мы использовали FinalBuilder для наших сборников, и пусть он просматривает файлы (в виде текстовых файлов) и обновляет их с помощью правильной информации о версии.
Самый простой способ реализовать это будет с этапа предварительной сборки, который вызывает скрипт какого-либо типа (sed/awk, PowerShell и т. Д.) Для всех ваших файлов ресурсов и падает в правильных значениях в соответствующих местах. Если вы используете SVN, то SubWCRev из дистрибутива TortoiseSVN может также использоваться для этой части и может автоматически использовать номер версии из вашего репозитория в качестве строки версии.
Вы можете написать немного кода, используя ResourceLib, чтобы сделать это или принять a build process that does it for you.