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


93

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

Версия SVN: 679

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

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


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

Если вы не используете TortoiseSVN для SubWCRev, как я сказал здесь , вы можете использовать svnversion, которая делает то же самое.
— nickf

Ответы:


31

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


2
Если вы не используете CruiseControl.Net, тогда ознакомьтесь с моим ответом (бессовестная вилка!) - stackoverflow.com/questions/163/… ; o)
— Эндрю

ссылка не работает @saint_groceon
— Cacho Santa

27

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


25

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

$Id:$

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

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

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

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


Вам необходимо убедиться, что для файлов также установлен атрибут svn: keywords, иначе $ Id $ и т. Д. Не будут заменены автоматически. См. Эту страницу. (Прокрутите вниз до svn: keywords)
— Майкл Стум

1
Я только что попробовал это с помощью $ Rev $, и это работает - до некоторой степени. Проблема в том, что он, кажется, обновляет ключевое слово только при изменении файла, в котором оно отображается. Это означает, что если в проект внесены изменения, которые не влияют на файл с $ Rev $ в нем (в моем случае это моя главная страница ASP.NET), проект будет иметь более высокую версию, чем отображается для пользователя. . Есть ли у кого-нибудь мысли по этому поводу? Есть ли способ заставить SVN всегда обновлять ключевые слова в файле?
— Крис Робертс

5
Разве это не просто вставит номер версии последнего изменения в этот конкретный файл? Я попытался настроить репозиторий с двумя файлами и изменил один, а также попробовал экспортировать и оформить заказ, а второй файл в обоих случаях остался на 1.
— Лассе В. Карлсен,

lassevk верен, это изменяется только при изменении самого файла.
— Бруно Лопес,

Используя VisualSVN и TortoiseSVN, добавление $ Id: $ просто заставляло страницу отображать «$ Id: $». Может быть полезно отметить, на каком сервере / клиенте работает этот ответ.
— Трэвис,

17

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


Звучит здорово, хотя ссылка не работает!
— Peter C

1
Для нас это было отличным решением для автоматизации отображения управления версиями на основе наших ревизий SVN. Одним из преимуществ является то, что не требуется обращения к вашему серверу SVN.
— Бен Элдер

ссылка не работает или сайт не работает
— Cacho Santa

1
Спасибо @cacho, исправлено - это была ошибка сервера [sic]; о)
— Эндрю

10

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


9

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

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

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


5

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.