Как мне синхронизировать номер версии SVN с моим веб-сайтом ASP.NET?

Внизу Stack Overflow указан номер версии Subversion:

Версия SVN: 679

Я хочу использовать такое автоматическое управление версиями с моими .NET Web Site/Application проектами / решениями Windows Forms, WPD.

Как мне это реализовать?

Ответов (7)

Решение

Судя по некоторым расшифровкам подкастов, Джефф использует CruiseControl.NET . Похоже, что у него есть возможности автоматического развертывания от управления версиями до производства. Может здесь и происходит прошивка?

Вы можете сделать это, добавив следующее в любом месте вашего кода

$Id:$

Так, например, @Jeff сделал:

<div id="svnrevision">svn revision: $Id:$</div>

и при проверке на сервере заменил $ Id: $ на текущий номер версии. Я тоже нашел эту ссылку .

Также есть $ Date: $ , $ Rev: $ , $ Revision: $

Чтобы добавить к ответу @ BradWilson: «Вы также можете попросить своего поставщика управления версиями предоставить номер версии исходного кода, если хотите

Для подключения Subversion и MSBuild: проект задач сообщества MSBuild

$rev и другие подобные - это версии отдельных файлов, поэтому они не изменятся, если файл не изменится. Номер на веб-странице (скорее всего, я предполагаю здесь) номер версии svn для всего проекта. Это отличается от ревизий файлов, на которые указывали другие.

В этом случае я предполагаю, что CCNET извлекает номер редакции проекта и переписывает часть веб-страницы с этим номером. Любое решение CI должно уметь это делать, настройте это самостоятельно с помощью CCNET и Teamcity (хотя и не веб-страницы, а автоматическое управление версиями версий развертывания / сборки).

Для этого используйте решение CI, которое его поддерживает, или используйте процесс сборки (MSbuild / Nant), чтобы сохранить эту версию и записать ее в файлы перед ее «развертыванием».

Мы делаем это с помощью 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, чтобы заархивировать результаты сборки, чтобы у нас была история двоичных файлов для каждой автоматизированной сборки.

@Balloon Если вы используете TortoiseSVN, вы можете использовать упакованную программу SubWCRev . Он запрашивает рабочую копию и сообщает вам только самый высокий номер редакции. По общему признанию, это кажется подходом на стороне клиента к проблеме на стороне сервера, но поскольку это хорошая программа командной строки, вы должны иметь возможность довольно легко записывать ее вывод для использования.

Если вы используете ASP.Net MVC (как это делает StackOverflow), я написал простое трехэтапное руководство по автоматическому получению и отображению последней версии SVN . Руководство было вдохновлено моей мыслью об этом самом вопросе! : o)