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

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

svn revision: 679

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

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

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

nickf 15.09.2008 23:04

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

nickf 16.09.2008 11:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
94
3
9 027
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

$Id:$

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

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

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

Также есть $ Дата: $, $ Rev: $, Редакция $: $

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

Lasse V. Karlsen 15.09.2008 23:11

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

Bruno Lopes 26.03.2009 22:29

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

Travis 01.05.2009 23:55

Вам также необходимо добавить в файл свойство svn:keywords Subversion и убедиться, что оно включает значение Id. Однако от этого мало толку: возможно, этот конкретный файл не был изменен.

Álvaro González 13.04.2010 14:36

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

Michael Stum 01.08.2008 23:52

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

Chris Roberts 06.08.2008 18:49
Ответ принят как подходящий

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

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

Andrew 17.12.2008 13:19

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

Cacho Santa 29.07.2014 00:06

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

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

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

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

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

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

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

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

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

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

Peter C 29.03.2010 15:23

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

Ben Elder 05.08.2011 19:54

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

Cacho Santa 28.07.2014 18:07

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

Andrew 29.07.2014 14:20

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