Как синхронизировать номер редакции SVN с моим веб-сайтом ASP.NET? - PullRequest
89 голосов
/ 01 августа 2008

Переполнение стека имеет номер версии subversion внизу:

SVN редакция: 679

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

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

Ответы [ 7 ]

30 голосов
/ 01 августа 2008

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

26 голосов
/ 16 августа 2008

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

 <!-- Cascading attempts to find a build number -->

 <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 и заменяет номер версии a.b.c.d на a.b.c.BuildNumber. Обычно мы оставляем источник проверенным в дереве с фиксированными первыми тремя частями номера строителя, а четвертой - с нулем (например, сегодня это 1.0.2.0).

В процессе сборки убедитесь, что задача SetVersionNumber предшествует вашей задаче сборки. В конце мы используем нашу задачу Zip, чтобы сжать результаты сборки, чтобы у нас была история двоичных файлов для каждой автоматической сборки.

24 голосов
/ 01 августа 2008

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

$Id:$

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

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

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

Существует также $ Дата: $ , $ Rev: $ , $ Редакция: $

17 голосов
/ 17 декабря 2008

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

10 голосов
/ 15 сентября 2008

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

9 голосов
/ 13 августа 2008

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

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

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

5 голосов
/ 01 октября 2008

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

Чтобы подключить Subversion и MSBuild: Проект MSBuild Community Tasks

...