Внизу Stack Overflow указан номер версии Subversion:
Версия SVN: 679
Я хочу использовать такое автоматическое управление версиями с моими .NET Web Site/Application
проектами / решениями Windows Forms, WPD.
Как мне это реализовать?
Внизу Stack Overflow указан номер версии Subversion:
Версия SVN: 679
Я хочу использовать такое автоматическое управление версиями с моими .NET Web Site/Application
проектами / решениями Windows Forms, WPD.
Как мне это реализовать?
Ответы:
Судя по некоторым расшифровкам подкастов, Джефф использует CruiseControl.NET . Кажется, у этого есть возможности автоматического развертывания от управления версиями до производства. Может здесь и происходит прошивка?
Мы делаем это с помощью xUnit.net для наших автоматических сборок. Мы используемCruiseControl.net
(и пробуем TeamCity). Задача MSBuild, которую мы запускаем для непрерывной интеграции, автоматически меняет номер сборки для нас, поэтому итоговый ZIP-файл сборки содержит правильно версионный набор DLL и EXE.
Наш файл MSBuild содержит ссылку UsingTask для библиотеки DLL, которая выполняет замену регулярных выражений: (вы можете использовать эту DLL, поскольку на нее также распространяется лицензия MS-PL)
<UsingTask AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll" TaskName = "CodePlex.MSBuildTasks.RegexReplace" />
Затем мы извлекаем номер сборки, который автоматически предоставляется системой CI. Вы также можете попросить своего поставщика управления версиями предоставить номер исходной версии, если хотите, но мы обнаружили, что номер сборки в системе CI был более полезен, потому что не только можно видеть результаты интеграции по номеру сборки CI, который также предоставляет ссылка на набор изменений, которые были включены в сборку.
<! - Каскадные попытки найти номер сборки -> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> $ (BUILD_NUMBER) </BuildNumber> </PropertyGroup> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> $ (ccnetlabel) </BuildNumber> </PropertyGroup> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> 0 </BuildNumber> </PropertyGroup>
(Мы пробуем BUILD_NUMBER из TeamCity, затем ccnetlabel из CC.net, и если ни один из них не присутствует, мы по умолчанию устанавливаем значение 0, чтобы мы могли протестировать сценарий автоматической сборки вручную.)
Затем у нас есть задача, которая устанавливает номер сборки в файл GlobalAssemblyInfo.cs, который мы связываем со всеми нашими проектами:
<Target Name = "SetVersionNumber"> <RegexReplace Pattern = 'AssemblyVersion \ ("(\ d + \. \ D + \. \ D +) \. \ D +" \)' Replacement = 'AssemblyVersion ("$ 1. $ (BuildNumber)")' Files = 'GlobalAssemblyInfo.cs' /> <Exec Command = "attrib -r xunit.installer \ App.manifest" /> </Target>
Это находит атрибут AssemblyVersion и заменяет номер версии abcd на abcBuildNumber. Обычно мы оставляем источник отмеченным в дереве с фиксированными первыми тремя частями номера компоновщика и четвертой равной нулю (например, сегодня это 1.0.2.0).
В процессе сборки убедитесь, что задача SetVersionNumber предшествует задаче сборки. В конце мы используем нашу задачу Zip, чтобы заархивировать результаты сборки, чтобы у нас была история двоичных файлов для каждой автоматизированной сборки.
Вы можете сделать это, добавив следующее в любом месте вашего кода
$Id:$
Так, например, @Jeff сделал:
<div id="svnrevision">svn revision: $Id:$</div>
и при проверке на сервере заменил $ Id: $ на текущий номер версии. Я также нашел эту ссылку .
Также есть $ Date: $ , $ Rev: $ , $ Revision: $
Если вы используете ASP.Net MVC
(как это делает StackOverflow), я написал простое трехэтапное руководство по автоматическому получению и отображению последней версии SVN . Руководство было вдохновлено моей мыслью об этом самом вопросе! : o)
@Balloon Если вы используете TortoiseSVN, вы можете использовать упакованную программу SubWCRev . Он запрашивает рабочую копию и сообщает вам только самый высокий номер ревизии. По общему признанию, это похоже на клиентский подход к проблеме на стороне сервера, но поскольку это хорошая программа командной строки, вы должны иметь возможность довольно легко фиксировать ее вывод для использования.
$rev
и другие подобные - это версии отдельных файлов, поэтому они не изменятся, если файл не изменится. Номер на веб-странице (скорее всего, я предполагаю здесь) номер версии svn для всего проекта. Это отличается от ревизий файлов, на которые указывали другие.
В этом случае я предполагаю, что CCNET извлекает номер редакции проекта и переписывает часть веб-страницы с этим номером. Любое решение CI должно уметь это делать, настройте это самостоятельно с помощью CCNET и Teamcity (хотя и не веб-страницы, а автоматическое управление версиями версий развертывания / сборки).
Для этого используйте решение CI, которое его поддерживает, или используйте процесс сборки (MSbuild / Nant), чтобы сохранить эту версию и записать ее в файлы перед ее «развертыванием».
Чтобы добавить к ответу @ BradWilson: «Вы также можете попросить своего поставщика системы управления версиями предоставить номер версии исходного кода, если хотите»
Чтобы подключить Subversion и MSBuild: проект задач сообщества MSBuild