Stack Overflow имеет номер версии subversion в нижней части:
svn revision: 679
Я хочу использовать такую автоматическую версионность в своих проектах/решениях .NET Web Site/Application
, Windows Forms, WPD.
Как мне это реализовать?
Похоже, что Джефф использует CruiseControl.NET, судя по тому, что мы пролистали транскрипты подкаста. Похоже, что он обладает возможностями автоматического развертывания из системы контроля исходного кода в производство. Может быть, именно здесь происходит вставка?
Мы делаем это с xUnit.net для нашего автоматизированного строит. Мы используем 'CruiseControl.net' (и испытывают TeamCity). Задача MSBuild, которой мы управляем для непрерывной интеграции автоматически, изменяет построить число для нас, таким образом, получающиеся строят zip-файл, содержит правильно versioned набор DLLs и EXEs.
Наш [файл MSBuild] [2] содержит ссылку UsingTask для DLL, который делает замены регулярного выражения: (you' ре, могущее использовать этот DLL, как it' s охваченный МН MS лицензией также)
< pre> & лейтенант; UsingTask AssemblyFile =" 3rdParty\CodePlex. MSBuildTasks.dll" TaskName =" CodePlex. MSBuildTasks. RegexReplace"/& gt;Затем, мы извлекаем построить число, которое обеспечено автоматически системой CI. Вы могли также заставить своего исходного поставщика контроля обеспечивать исходное число пересмотра, если Вы хотите, но мы нашли, что строить # в системе CI было более полезным, потому что не только видят, что результаты интеграции CI строят число, которое также обеспечивает связь назад с changeset (s), которые были включены в то, чтобы строить.
< pre> & лейтенант;! - льющиеся каскадом попытки найти построить число - >& лейтенант; Условие PropertyGroup =" ' $ (BuildNumber)' == ' ' " > & лейтенант; BuildNumber> $ (BUILD_NUMBER) & лейтенант;/BuildNumber> & лейтенант;/PropertyGroup> & лейтенант; Условие PropertyGroup =" ' $ (BuildNumber)' == ' ' " > & лейтенант; BuildNumber> $ (ccnetlabel) & лейтенант;/BuildNumber> & лейтенант;/PropertyGroup> & лейтенант; Условие PropertyGroup =" ' $ (BuildNumber)' == ' ' " > & лейтенант; BuildNumber> 0& лейтенант;/BuildNumber> & лейтенант;/PropertyGroup>
(Мы пробуем BUILD_NUMBER, который является от TeamCity, тогда ccnetlabel, который является от CC.net, и если ни один не присутствует, мы не выполняем своих обязательств к 0, так, чтобы мы могли проверить автоматизированный, строят сценарий вручную.)
Затем, у нас есть задача, которая определяет встраивать номер в файл GlobalAssemblyInfo.cs, который мы связываем во все наши проекты:
< pre> & лейтенант; Целевое Имя =" SetVersionNumber" > & лейтенант; RegexReplace Образец =' AssemblyVersion \(" (\d +\.\d +\.\d +)\.\d +" \) ' Замена =' AssemblyVersion (" $ за 1. $ (BuildNumber)") ' Файлы =' GlobalAssemblyInfo.cs'/> & лейтенант; Исполнительная Команда =" attrib-r xunit.installer\App.manifest"/> & лейтенант;/Target>Эта находка признак AssemblyVersion, и заменяет a.b.c.d номер версии a.b.c. BuildNumber. Мы будем обычно уезжать, источник зарегистрировался в дереве с первыми тремя частями числа строителя, зафиксированного, и четвертое на нуле (f.e., сегодня it' s 1.0.2.0).
В Вашем процессе сборки удостоверьтесь, что задача SetVersionNumber предшествует Вашему строила задачу. В конце мы используем нашу задачу Почтового индекса для на молнии построить результаты так, чтобы у нас была история наборов из двух предметов для каждого автоматизированного, строят.
[2]: http://www.codeplex.com/xunit/SourceControl/FileView.aspx? itemId=115610& changeSetId=20735
Вы можете сделать это, добавив следующее в любом месте вашего кода
$Id:$
Так, например, сделал @Jeff:
<div id="svnrevision">svn revision: $Id:$</div>
и при проверке сервер заменил $Id:$ на номер текущей ревизии. Я также нашел эту ссылку.
Есть также $Date:$, $Rev:$, $Revision:$.
Если you' 'ASP.NET MVC' использования ре (поскольку StackOverflow делает), I' ve, письменный [легкий следовать руководству с 3 шагами о том, как автоматически получить и показать последний пересмотр SVN] [1]. Гид был вдохновлен, думая мне об этом самом вопросе!: o)
[1]: http://www.fatlemon.co.uk/2008/12/automatic-svn-revision-numbering-in-aspnet-mvc/" Автоматическая нумерация пересмотра SVN в ASP.Net MVC - www.fatlemon.co.uk"
@Balloon Если Вы используете TortoiseSVN, Вы можете использовать упакованный [SubWCRev] (http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html) программа. Это подвергает сомнению рабочую копию и говорит Вам просто самое высокое количество пересмотра. По общему признанию это, кажется, клиентский подход к проблеме стороны сервера, но с тех пор it' s хорошая программа командной строки, Вам необходимо захватить ее продукцию для использования довольно легко.
$rev
и подобные ему - это ревизии для отдельных файлов, поэтому они не изменятся, если не изменится файл. Номер на веб-странице - это (скорее всего, я предполагаю) номер ревизии svn для всего проекта. Это отличается от ревизий файлов, на которые указывали другие.
В данном случае я предполагаю, что CCNET извлекает номер ревизии проекта и переписывает часть веб-страницы с этим номером. Любое CI-решение должно уметь это делать, я сам так настроил CCNET и Teamcity (правда, не веб-страницы, а автоматическую версификацию версий развертывания/сборки).
Чтобы сделать это, используйте решение CI, которое поддерживает это, или используйте ваш процесс сборки (MSbuild/Nant) для хранения этой версии и записи ее в файлы перед "развертыванием".
Добавить к @BradWilson' s ответ: " Вы могли также заставить своего исходного поставщика контроля обеспечивать исходное число пересмотра если Вы want"
Соединить Подрывную деятельность и MSBuild: Проект задач сообщества MSBuild