Проблемы с автоматической синхронизацией моей версии сборки с моей версией SubVersion - PullRequest
0 голосов
/ 07 октября 2009

Я пытаюсь настроить свой проект VisualStudio, чтобы установить версию сборки на основе номера последней версии subversion, как описано в на этой странице . Но номер версии всегда запаздывает на одну ревизию.

Я разделил атрибут версии сборки на отдельный файл VersionInfo.cs, который обновляется событием предварительной сборки.

Я использую следующий код для отображения номера версии в заголовке моей формы:

System.Reflection.Assembly assem = System.Reflection.Assembly.GetExecutingAssembly();
this.Text = "My Program Version: " + assem.GetName().Version.ToString();

Вот обзор того, что происходит.

  1. Я фиксирую свой проект так, чтобы он был в последней редакции.

  2. Использование TortiseSVN Я использую show log, чтобы увидеть, что я нахожусь на ревизии 55

  3. Я строю свое решение.

  4. Затем я открываю VersionInfo.cs и вижу, что событие перед сборкой правильно переписало этот файл как

    [сборка: System.Reflection.AssemblyVersion ("0.1.55. *")]

  5. Тем не менее, когда я запускаю программу, отображается строка заголовка и старая версия 0.1.52.20486

  6. Далее я открываю файл проекта в блокноте и что-то изменяю, например добавляю пустую строку, а затем сохраняю файл.

  7. VisualStudio показывает уведомление о том, что файл проекта изменился, и предлагает перезагрузить проект, который я принимаю

  8. Теперь, когда я собираю и запускаю программу, форма показывает версию 0.1.55.20645

  9. Я что-то изменяю в проекте и фиксирую в SubVersion.

  10. TortiseSVN подтверждает, что моя рабочая копия сейчас на редакции 56.

  11. Я строю свой проект, и VersionInfo.cs корректно обновляется до

    [сборка: System.Reflection.AssemblyVersion ("0.1.56. *")]

  12. Я пытаюсь запустить приложение снова, и заголовок формы показывает 0.1.55.20750, а не 0.1.56.xxxxxx

Также я заметил, что даже если я пересоберу / перезапущу свое приложение, номер сборки (последний номер в номере версии) также не обновляется. Насколько я понимаю, звездочка будет заменена новым номером при каждой сборке.

Кто-нибудь знает, что происходит?

Ответы [ 3 ]

1 голос
/ 04 мая 2011

Я не работал с конкретным инструментом, который вы используете, но инструмент, который я использую, требует, чтобы вы обновили свою песочницу после своего коммита. Имеет отношение к инструменту, использующему номер ревизии, полученный последним обновлением, а не последний коммит.

0 голосов
/ 04 мая 2011

Лучший способ справиться с этим, когда вы делаете свою сборку.

Я использую Jenkins в качестве сервера непрерывной сборки вместо того, чтобы полагаться на ручную сборку в моей системе. Если вы не используете что-то вроде Jenkins (Hudson, Atlassian Bamboo и CruiseControl - три других популярных сервера Continuous Build), вам следует. Таким образом, ваши официальные сборки не зависят от конкретной машины разработчика.

Если вы используете Jenkins, теперь вы можете использовать Nant или даже Ant , чтобы помочь вам манипулировать вашей сборкой. Мы делаем это сейчас с Дженкинсом и Ант.

Я использую msbuild.exe, чтобы построить мой проект с использованием Jenkins. Перед тем, как сделать сборку, я использую Ant для получения номера ревизии Subversion (на самом деле мы используем номер сборки Jenkin, но теория та же) для изменения файла сборки с правильной версией. Затем я делаю сборку сама. Результатом является правильный номер ревизии Subversion (в нашем случае номер сборки Jenkins) в файле сборки при сборке.

Если подумать, вы, вероятно, можете делать то, что делаете сейчас, чтобы установить Revision в файле Assembly. Затем Дженкинс соберет проект с правильным номером ревизии в файле сборки. Вы загружаете собранный пакет и в строке заголовка увидите правильный номер версии.

0 голосов
/ 09 октября 2009

Когда вы регистрируете файл, номер редакции увеличивается, как вы знаете. Проблема в том, что вы не знаете, какой будет номер ревизии при регистрации - вы узнаете только после регистрации.

Итак, если вы берете номер последней редакции, строите свой проект, а затем регистрируетесь - используемый номер всегда будет устаревшим. То, что вы действительно хотите, - это иметь возможность зарегистрироваться, затем получить revnum коммита, который вы только что выполнили, и затем построить свой проект с правильным номером версии.

Очевидно, что это невозможно.

Существует способ обойти это - использовать систему CI, которая создает ваш проект сразу после регистрации (через ловушку после фиксации). Они извлекут последнюю версию, которую вы только что добавили, обновите файл version.cs, затем соберите. Недостатком является то, что ваш файл version.cs никогда не будет содержать правильный номер версии (если только система CI не проверит его снова)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...