Версия сборки и номер редакции

У меня есть приложение asp.net/C#, которое использует subversion для управления версиями.

Мое приложение автоматически увеличивает AssembleVersion и AssemblyFileVersion для каждой сборки, что работает как шарм, и отображает номер сборки в административной части сайта.

Мы отслеживаем версии AssembleVersion и AssemblyFileVersion, когда выполняем развертывание, однако, когда возникает проблема и нам нужно вернуться к определенной версии, мы понятия не имеем, на какую версию ориентироваться в subversion.

У меня есть несколько идей:

  1. Сохранить AssembleVersion как комментарий в каждом файле
  2. Имейте ключевое слово в комментариях коммита, которое заменяется на AssembleVersion при каждом коммите (еще нужно выяснить, как это сделать)

Любая помощь и предложения будут оценены

Обновлено: вариант "1" на самом деле глупая идея, потому что это будет означать, что каждый раз, когда я строю, все файлы будут помечаться как обновленные, а когда я фиксирую, каждый отдельный файл будет обновляться.


person stoic    schedule 28.07.2010    source источник
comment
кажется, что все указывают на теги. Любая идея, где я могу получить учебник по тегам? и как их создать? Я никогда даже не слышал о тегах   -  person stoic    schedule 28.07.2010


Ответы (8)


Когда я строю, я везде ставлю этот номер сборки.

  • Я поместил его в тег в svn.
  • Я помещаю его в метаданные сборки каждой сборки, которую я создаю.
  • Я добавляю его в конец имени файла в моих установщиках.
  • Я поместил его в нижний колонтитул каждой из моих развернутых веб-страниц.
  • Я поместил это в нижний колонтитул своих отчетов.
  • Я поместил его на заставку своих клиентских приложений.
  • Я поместил его на экран приветствия для моих установщиков.

Единственное, что я не добавляю, так это свой кофе, который я пью черным .

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

person Dave Markle    schedule 28.07.2010
comment
да ... это то, над чем я работаю, просто не знаю, как создавать теги :( - person stoic; 28.07.2010
comment
все, что вам нужно сделать, это использовать команду копирования svn, и это создаст тег в любом месте, где вы хотите. Весь тег — это копия, которая реализована в виде указателя в subversion. Вы должны выполнить эту команду внутри вашего файла сборки или внутри вашей системы управления сборкой. CruiseControl, например, делает этот тег для вас, просто правильно настроив ваш проект. - person Dave Markle; 28.07.2010
comment
Извини, я не согласен с тем, что нельзя добавлять его в твой кофе. Как еще вы могли бы узнать, что он остался со вчерашнего дня? - person Brian Gideon; 28.07.2010
comment
@ Брайан, температура определенно не является хорошим показателем, поскольку вчерашний кофе такой же холодный, как и на прошлой неделе! - person Kiril; 18.05.2011

Как насчет использования тегов.

http://svnbook.red-bean.com/en/1.1/ch04s06.html

person Chris Diver    schedule 28.07.2010
comment
Может быть, мне стоит заняться подрывной деятельностью, потому что даже после прочтения простых и сложных примеров я все еще даже не знаю, с чего начать с тегов. - person stoic; 28.07.2010
comment
Я думаю, это зависит от того, как вы используете subversion, используете ли вы что-то вроде tortoise SVN или из командной строки, образцы в книге являются примерами использования инструментов командной строки. Я рекомендую просмотреть остальную часть книги, если вы хотите освежить в памяти svnbook.red-bean.com< /а> - person Chris Diver; 28.07.2010
comment
да, я использую инструменты графического интерфейса, такие как черепаха и анкх, я никогда не использовал командную строку (просто потому, что мне это не нужно), но сейчас я кое-что читаю :) - person stoic; 29.07.2010

Теги не очень полезны, если вам приходится часто строить. Может быть, вместо этого найти способ обновить версию сборки на основе версии svn? Также укажите имя ветки, потому что они имеют общие ревизии.

И вы должны иметь возможность извлечь версию сборки на своих страницах ASP.NET и распечатать ее программно в нижнем колонтитуле или что-то в этом роде.

person jishi    schedule 28.07.2010
comment
мне удалось получить номер версии от svn, используя sharpsvn.open.collab.net (SharpSVN), однако это создает некоторую боль ... почему?!? .... хорошо, когда именно вы говорите ему проверить версию и где вы ее сохраняете? - person stoic; 28.07.2010
comment
Это пользовательская задача AssemblyInfoTask, которая обновляет версию сборки при сборке, поэтому вы можете использовать такую ​​задачу. Однако может потребоваться некоторая настройка, чтобы получить фактический номер версии. Я сам не использовал это, потому что мы выбрали более простое решение, экспортировать текстовый файл с номером версии, который включен в веб-сайт, просто как подсказка для нас. Недостатком является то, что мы не можем видеть номер версии в нашей dll. - person jishi; 29.07.2010

Вы можете пометить ствол Subversion с помощью AssembleVersion или AssemblyFileVersion, в зависимости от того, что имеет смысл.

Вы также можете отслеживать номер версии Subversion точно так же, как сейчас вы отслеживаете версии AssembleVersion и AssemblyFileVersion при развертывании.

person Gilbert Le Blanc    schedule 28.07.2010

Примените тег к исходному дереву после обновления AssemblyVersion и AssemblyFileVersion.

person Martin Liversage    schedule 28.07.2010

Вы можете «разветвить для выпуска». Перед созданием сборки релиза вы можете разветвить ствол, а затем создать тег в новой ветке с номером версии релиза.

              + release tag
             /
            +--------------------- release branch
           /  
----------+----------------------------------------------------- trunk

Это позволит вам отслеживать все отдельные выпуски в SVN. Это также позволит вам делать отдельные исправления ошибок в ветках релизов, которые могут быть выпущены в виде патчей. Затем исправление ошибки можно было бы объединить обратно в ствол.

              +                 + patch release tag
             /                 /
            +-----------------+-+---- release branch
           /                    | merged fix into trunk...
----------+----------------------------------------------------- trunk
person Michael Arnell    schedule 28.07.2010

Теги/ветки определенно являются рекомендуемым подходом.

Вы также можете (или дополнительно) включить номер версии svn в файл AssemblyInfo. Один из подходов — использовать задачу AssemblyInfo из проекта msbuildtasks по адресу http://msbuildtasks.tigris.org.

Для получения дополнительной информации, google msbuild svn ревизия информации о сборке< /а>

Тогда вы можете обойтись без тегов/веток, так как вы всегда можете извлечь конкретную ревизию и/или создать ветку из конкретной ревизии.

person jeroenh    schedule 28.07.2010

Другой вариант — использовать последнюю измененную версию в качестве номера сборки. Это означает, что каждый раз, когда вы строите автоматическую пометку. С hudson/jenkins это легко сделать, так как у вас есть переменная окружения SVN_REVISION. Проблема в том, что номер ревизии становится очень большим, а дискуссии о 1.0.0.20456 и 1.0.0.20489 в коридоре становятся полными.

person Peter Kahn    schedule 27.07.2011