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

StackOverflow https://stackoverflow.com/questions/163

  •  08-06-2019
  •  | 
  •  

Вопрос

Stack Overflow имеет номер версии subversion внизу:

редакция svn:679

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

$Id:$

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

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

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

Существует также $Дата:$, $Rev:$, $Пересмотр:$

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top