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

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

SVN редакция: 679

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

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

1.08.2008 18:00:13
@Balloon Если вы используете TortoiseSVN, вы можете использовать упакованную программу SubWCRev . Он запрашивает рабочую копию и сообщает вам только самый высокий номер ревизии. По общему признанию, это, кажется, клиентский подход к проблеме на стороне сервера, но, поскольку это хорошая программа командной строки, вы должны быть в состоянии захватить ее вывод для использования довольно легко.
nickf 15.09.2008 19:04:33
Если вы не используете TortoiseSVN для SubWCRev как я уже говорил здесь , вы можете использовать svnversion , который делает то же самое.
nickf 16.09.2008 07:37:16
7 ОТВЕТОВ
РЕШЕНИЕ

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

30
29.12.2015 06:27:45
Если вы не используете CruiseControl.Net, посмотрите мой ответ (бесстыдный плагин!) - stackoverflow.com/questions/163/… ; o)
Andrew 17.12.2008 10:19:20
ссылка не работает @saint_groceon
Cacho Santa 28.07.2014 20:06:04

Мы делаем это с 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
       Шаблон = 'AssemblyVersion \ ( "(\ d + \. \ D + \. \ D +) \. \ D +" \)'
       Замена = 'AssemblyVersion ( "$ 1. $ (BuildNumber)")'
       Файлы = 'GlobalAssemblyInfo.cs' />
   <Exec Command = "attrib -r xunit.installer \ App.manifest" />
 </ Target>

Это находит атрибут AssemblyVersion и заменяет номер версии abcd на abcBuildNumber. Обычно мы оставляем источник проверенным в дереве с фиксированными первыми тремя частями номера строителя, а четвертой - с нулем (например, сегодня это 1.0.2.0).

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

26
29.12.2015 06:29:07

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

$Id:$

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

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

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

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

24
29.12.2015 06:29:47
Вы должны убедиться, что в файлах также установлен атрибут svn: Keywords, иначе $ Id $ и т. Д. Не будут автоматически заменены. Смотрите эту страницу. (Прокрутите вниз до svn: ключевые слова)
Michael Stum♦ 1.08.2008 19:52:09
Я только что попробовал это, используя $ Rev $, и это работает - до некоторой степени. Проблема в том, что оно, по-видимому, обновляет ключевое слово только при изменении файла, в котором оно появляется. Это означает, что если в проект будут внесены изменения, которые не повлияют на файл с $ Rev $ (в моем случае это моя главная страница ASP.NET), то у проекта будет более высокая ревизия, чем отображается пользователю , У кого-нибудь есть мысли по этому поводу? Есть ли способ заставить SVN всегда обновлять ключевые слова в файле?
Chris Roberts 6.08.2008 14:49:55
Разве это не просто вставить номер ревизии последнего изменения в этот конкретный файл? Я попытался настроить двухфайловое хранилище и изменил один, и попробовал и экспорт и извлечение, и другой файл остался в 1 в обоих случаях.
Lasse V. Karlsen 15.09.2008 19:11:27
lassevk корректен, это меняется только при изменении самого файла.
Bruno Lopes 26.03.2009 19:29:15
Используя VisualSVN и TortoiseSVN, добавление $ Id: $ просто заставило страницу отобразить «$ Id: $». Может быть полезно отметить, на каком сервере / клиенте работает этот ответ.
Travis 1.05.2009 19:55:17

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

17
29.12.2015 06:28:48
Звучит замечательно, хотя ссылка не работает!
Peter C 29.03.2010 11:23:57
Для нас это было отличным решением для автоматизации отображения версий на основе наших версий SVN. Одним из преимуществ является то, что он не требует вызова на ваш сервер SVN.
Ben Elder 5.08.2011 15:54:47
ссылка не работает или сайт не работает
Cacho Santa 28.07.2014 14:07:39
Спасибо @cacho, исправлено - это была ошибка сервера [sic]; o)
Andrew 29.07.2014 10:20:36

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

10
15.09.2008 19:04:33

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

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

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

9
29.12.2015 06:28:34

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

Чтобы соединить Subversion и MSBuild: Проект Задачи Сообщества MSBuild

5
29.12.2015 06:28:18