Visual Studio с проблемой автоматического создания версий SubWCRev - PullRequest
2 голосов
/ 28 марта 2011

Народ,

Я использую VS2010 и пытаюсь синхронизировать версию сборки моего проекта с моим хранилищем Subversion, используя SubWCRev.Это все работает правильно, но я не могу полностью разобраться в одном.Мой файл шаблона состоит из этого:

#define MAJOR_VERSION       2
#define MINOR_VERSION       2
#define MICRO_VERSION       0
#define BUILD_VERSION       $WCMODS?$WCREV$+1:$WCREV$$

#define QUOTE_(x) #x
#define QUOTE(x) QUOTE_(x)

#define BUILD_VERSION_STRING    QUOTE(MAJOR_VERSION.MINOR_VERSION.MICRO_VERSION.BUILD_VERSION)

Тогда в моем приложении .RC-файл у меня есть:

 FILEVERSION MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_VERSION
 PRODUCTVERSION MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_VERSION
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "080004e4"
        BEGIN
            VALUE "FileVersion", BUILD_VERSION_STRING
            VALUE "ProductVersion", BUILD_VERSION_STRING
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x800, 1252
    END
END

Как вы, вероятно, можете решить, я пытаюсь собрать сборкуверсия на 1, если есть модифицированный код, чтобы версия сборки в EXE соответствовала номеру ревизии Subversion, когда я делаю релиз и проверяю код. Проблема в том, что BUILD_VERSION расширяется до x + 1 или x + 0, который затем появляетсяв BUILD_VERSION_STRING как "2.2.0.227 + 1", что не совсем то, что я хотел.

Кто-нибудь с немного большим опытом с этим знает способ достижения моей цели?Заранее спасибо

Ответы [ 4 ]

1 голос
/ 23 января 2014
#define BUILD_VERSION       $WCMODS?$WCREV+1$:$WCREV$$
0 голосов
/ 31 марта 2011

В моей группе мы только автоматизируем обновление наименее значимого значения с помощью номера редакции svn для рабочего каталога проектов.Для этого мы добавили шаг предварительной сборки к каждому проекту, который создает, а затем вызывает пакетный скрипт, который выполняет следующие действия:

  1. Копировать свойства $ (ProjectDir) \ AssemblyInfo.cs в $ (ProjectDir)) Свойства \ AssemblyInfo.cs.template.
  2. Найти AssemblyVersion ("XYZddd") в $ (ProjectDir) Свойства \ AssemblyInfo.cs.template и заменить на AssemblyVersion ("XYZ $ WCREV $").
  3. Найдите AssemblyFileVersion ("XYZddd") в свойствах $ (ProjectDir) \ AssemblyInfo.cs.template и замените на AssemblyFileVersion ("XYZ $ WCREV $").
  4. Выполните 'SubWCRev $ (ProjectDir) $ (Свойства ProjectDir) \ AssemblyInfo.cs.template $ (ProjectDir) Свойства \ AssemblyInfo.cs '
0 голосов
/ 13 июня 2012

Если вы используете subwcrev для создания неверсионного заголовка из вашего версионного шаблона, тогда #include неверсированный заголовок в вашем версионном .RC файл, который вы можете создать для выпуска из неизмененной рабочей области.

Тогда вы можете просто использовать

#define BUILD_VERSION       $WCREV$

Это также устраняет риск любых изменений, возникающих между сборками вашего релиза.EXE и проверка в коде.

0 голосов
/ 28 марта 2011

Не могли бы вы сделать что-то вроде:

#define MOD_VERSION $WCMODS?1:0$
#define REVISION $WCREV$
#define BUILD_VERSION ( REVISION + MOD_VERSION )

Изменить: Это не будет работать, как указано в комментариях!

Какова цельномер вашей версии?Если это вернуться к исходному коду, используемому для создания бинарного файла, то здесь вы можете немного подстрелить себя.Что произойдет, если кто-то добавит еще код в хранилище в то же время, когда вы создаете номер версии?В итоге вы получите двоичный код, ссылающийся на другой код.

Что может быть лучше, так это проверить, есть ли в рабочей копии какие-либо модификации или смешанные ревизии, и использовать определенный номер ревизии (например, 0xFFFFFFFF или 0), чтобы представить это.И используйте истинный номер ревизии, только если вы использовали чистое дерево для построения двоичного файла.

#define MAJOR_VERSION       2
#define MINOR_VERSION       2
#define MICRO_VERSION       0
#if $WCMODS?1:0$
#define BUILD_VERSION       0
#else
#define BUILD_VERSION       $WCREV$
#endif
...