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

У есть номер версии subversion внизу:

svn revision: 679

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

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

Ответы

Ответ 1

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

Ответ 2

Мы делаем это с xUnit.net для наших автоматизированных сборок. Мы используем CruiseControl.net (и пробуем TeamCity). Задача MSBuild, которую мы запускаем для непрерывной интеграции, автоматически изменяет номер сборки для нас, поэтому полученный ZIP файл сборки содержит правильно обновленный набор DLL и EXE.

Наш Файл MSBuild содержит ссылку UseTask для 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, чтобы мы могли вручную выполнить автоматическую сборку script.)

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

Ответ 3

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

$Id:$

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

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

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

Существует также $Date: $, $Rev: $, $Revision: $

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

Чтобы подключить Subversion и MSBuild: Проект задач сообщества MSBuild