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

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

Nickf
источник
9

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

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

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

Джеймс Погран
источник
5

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

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

Ян
источник