Есть ли способ включить номер ревизии репозитория SVN в строку версии сборки .NET? Что-то вроде Major.Minor.SVNRev
Я'видел упоминание о том, что это можно сделать с помощью чего-то вроде CC.NET (хотя на самом деле на ASP.NET), но есть ли способ сделать это без дополнительного программного обеспечения? Я'раньше делал подобное в C/C++, используя пакетные скрипты сборки, но это достигалось чтением номера версии, затем скрипт каждый раз записывал файл под названием "ver.h" с чем-то вроде:
#define MAJORVER 4
#define MINORVER 23
#define SOURCEVER 965
Затем мы использовали эти определения для генерации строки версии.
Возможно ли нечто подобное для .NET?
Here' s и пример C# для обновления информации о пересмотре на собрании автоматически. Это основано на ответе Уилла Дина, который не очень тщательно продуман.
Пример:
' [собрание: AssemblyFileVersion (" 1.0.0. $WCREV$ ")]'
' [собрание: AssemblyInformationalVersion (" Постройте дату: $WCNOW = % % Y-m-% d %H: % M: S$ %; дата Пересмотра: $WCDATE = % % Y-m-% d %H: % M: S$ %; Пересмотр (пересмотры) в рабочей копии: $WCRANGE$$WCMODS?; ПРЕДУПРЕЖДАЯ работающий у копии были нейтральные модификации: $.")]',
который сообщит подробности о статусе пересмотра источника, которым было собрание, строят из.
'subwcrev " $ (SolutionDir)." " $ (ProjectDir)Properties\AssemblyInfoTemplate.cs" " $ (ProjectDir)Properties\AssemblyInfo.cs"-f'
В ответ на возражения Вимом Кененом я заметил, что, в отличие от того, что было предложено Дэррилом, AssemblyFileVersion также делает не числа поддержки выше 2^16. Строить закончит, но собственность Версия Файла на фактическом собрании будет модулем AssemblyFileVersion 65536. Таким образом, 1.0.0.65536, а также 1.0.0.131072 уступит 1.0.0.0, и т.д. В этом примере в собственности AssemblyInformationalVersion всегда есть истинное число пересмотра. Вы могли не учесть шаг 3, если Вы считаете это значительной проблемой.
Отредактируйте: некоторая дополнительная информация, используя это решение некоторое время.
Это теперь использует AssemblyInfo.cst, а не AssemblyInfoTemplate.cs, потому что это будет автоматически иметь , Строят Действие выбор Ни один, и это не загромоздит Вас Ошибочный список, но you' ll освобождают выдвижение на первый план синтаксиса.
I' ve добавил два теста к моим файлам AssemblyInfo.cst:
#if (! ОТЛАДКА)
$WCMODS? #error, Работающий, у копии есть нейтральные модификации, пожалуйста, передайте, все модификации прежде, чем создать выпуск строят.: $
#endif
#if (! ОТЛАДКА)
$WCMIXED? #error, Работающий, у копии есть несколько пересмотров, пожалуйста, обновите к последнему пересмотру прежде, чем создать выпуск, строят.: $
#endif
Используя это, Вы должны будете обычно выполнять полное Обновление SVN после передавания и прежде чем Вы сможете сделать, успешный выпуск строит. Иначе $WCMIXED будет верен. Это, кажется, вызвано тем, что преданное ре файлов в главном пересмотре после передавания, но других файлов нет.
У меня были некоторые сомнения ли первый параметр к subwcrev, " $ (SolutionDir)" который устанавливает объем для проверки svn информация о версии, действительно всегда работает, как желаемый. Возможно, это должен быть $ (ProjectDir), если Вы довольны, если каждое отдельное собрание находится в последовательном пересмотре.
Дополнение Чтобы ответить на комментарий @tommylux.
SubWcRev может использоваться для любого файла в Вас проект. Если Вы хотите показать информацию о пересмотре в веб-странице, Вы могли бы использовать этот шаблон VersionInfo:
public class VersionInfo
{
public const int RevisionNumber = $WCREV$;
public const string BuildDate = "$WCNOW=%Y-%m-%d %H:%M:%S$";
public const string RevisionDate = "$WCDATE=%Y-%m-%d %H:%M:%S$";
public const string RevisionsInWorkingCopy = "$WCRANGE$";
public const bool UncommitedModification = $WCMODS?true:false$;
}
Добавьте предварительно построить событие точно так же, как то для AssemblyInfo.cst, и у Вас будет легкий доступ ко всей соответствующей информации о SubVersion.
Это возможно, но Вы shouldn' t: компоненты последовательности собрания вариантов ограничены 16-битными числами (макс. 65535). Числа пересмотра подрывной деятельности могут легко стать больше, чем это так в какой-то момент, компилятор внезапно собирается жаловаться.
Загляните на сайт SubWCRev - http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
Номера версий сборок обычно находятся в файле assemblyinfo.cs
Читайте/просматривайте этих докторов:
[Получая доступ к хранилищу Подрывной деятельности от.NET использование DotSVN] [1]
Вставьте версию SVN и Постройте число в Вашем файле C# AssemblyInfo
Собирая приложения с таможенными задачами для Microsoft Build Engine
MSBuildCommunityTasks svnversion, упомянутый в третьей ссылке, не выступил бы с svn на Mac 10.5.6, и проект VS2008 C# строят внутренние Параллели, принимающие Vista (т.е., через OS).
Напишите свою собственную задачу восстановить пересмотр от использования хранилища DotSVN:
using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using DotSVN.Common;
using DotSVN.Common.Entities;
using DotSVN.Common.Util;
using DotSVN.Server.RepositoryAccess;
namespace GetSVNVersion
{
public class GetRevision : Task
{
[Required]
public string Repository { get; set; }
[Output]
public string Revision { get; set; }
public override bool Execute()
{
ISVNRepository repo;
bool connected = true;
try
{
repo = SVNRepositoryFactory.Create(new SVNURL(Repository));
repo.OpenRepository();
Revision = repo.GetLatestRevision().ToString();
Log.LogCommandLine(Repository + " is revision " + Revision);
repo.CloseRepository();
}
catch(Exception e)
{
Log.LogError("Error retrieving revision number for " + Repository + ": " + e.Message);
connected = false;
}
return connected;
}
}
}
Этот путь позволяет пути хранилища быть " file:///Y:/repo" где Y: каталог Mac, нанесенный на карту в Vista.
[1]: http://www.codeproject.com/KB/library/subversion_using_dotsvn.aspx? display=PrintAll
Другой ответ упомянул, что число пересмотра SVN не могло бы быть хорошей идеей из-за ограничения на размер числа.
Следующая ссылка обеспечивает не только число пересмотра SNV, но также и шаблон информации о версии даты.
Добавление этого к.NET проекту просто - очень мало работы должно быть сделано.
Вот проект GitHub, который обращается к этому https://github.com/AndrewFreemantle/When-The-Version/downloads
Следующий URL может медленно загружать, но является постепенным объяснением того, как сделать эту работу (легкие и короткие 3 или 4 шага)
Если вы хотите обновить номер версии в проекте AssemblyInfo.cs, вам может быть интересна эта статья:
CodeProject: Использование номеров ревизий Subversion в проектах Visual Studio
Если вы включите SVN Keywords, то каждый раз, когда вы проверяете проект, Subversion сканирует ваши файлы на наличие определенных "ключевых слов" и заменяет ключевые слова некоторой информацией.
Например, в верхней части моих исходных файлов я бы создал заголовок, содержащий следующие ключевые слова:
'$Author:$ '$Id:$ '$Rev:$
Когда я проверяю этот файл в Subversion, эти ключевые слова заменяются на следующие:
'$Author: paulbetteridge $ '$Id: myfile.vb 145 2008-07-16 15:24:29Z paulbetteridge $ '$Rev: 145 $
svn info сообщает вам версию, на которой вы находитесь, вы можете сделать событие "предварительной сборки" в VS для вашего проекта, чтобы сгенерировать assemblyinfo.cs, запустив svn info и разобрав его результаты с помощью домашнего приложения командной строки.
Я уже делал это раньше, но быстро переключился на то, чтобы ccnet просто передавал его как переменную в nant.
Вы можете использовать совместно использованный файл Ассамблеи Вариантов, на который Вы можете сослаться во всех Ваших проектах.
Апперкот делает это - [http://ferventcoder.com/archive/2009/05/21/uppercut---автоматизированный - строит---versionbuilder.aspx] [2]
Это даст Вам общее представление о том, что Вы можете сделать, чтобы получить версии на Ваших собраниях.
[2]: http://ferventcoder.com/archive/2009/05/21/uppercut---автоматизированный - строит---versionbuilder.aspx