2009-05-21 3 views
4

У меня есть решение с примерно 8 отдельными проектами в нем, и каждый раз, когда я делаю выпускную сборку всего решения, мне нужно убедиться, что строка версии для двоичный вывод каждого проекта одинаковый. Есть ли простой способ синхронизации раздела VS_VERSION_INFO файла ресурсов проекта?Синхронизация ресурсов версии в проектах Visual Studio C++ (Win32)

ответ

7

Я не знаю, что это так, как вы хотели бы пойти, но .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 

Ссылка на один заголовочный файл во всех проектах и ​​изменение его перед каждой сборкой.

1

Мы использовали FinalBuilder для наших сборников, и пусть он просматривает файлы (в виде текстовых файлов) и обновляет их с помощью правильной информации о версии.

1

Самый простой способ реализовать это будет с этапа предварительной сборки, который вызывает скрипт какого-либо типа (sed/awk, PowerShell и т. Д.) Для всех ваших файлов ресурсов и падает в правильных значениях в соответствующих местах. Если вы используете SVN, то SubWCRev из дистрибутива TortoiseSVN может также использоваться для этой части и может автоматически использовать номер версии из вашего репозитория в качестве строки версии.