Вопрос

Есть ли способ включить номер версии репозитория SVN в строку версии сборки .NET?Что-то вроде Major.Minor.SVNRev

Я видел упоминание о том, чтобы сделать это с помощью чего-то вроде CC.NET (хотя на самом деле и ASP.NET), но есть ли способ сделать это без какого-либо дополнительного программного обеспечения?Я делал подобные вещи на C/C++ перед использованием сценариев пакетной сборки, но это было достигнуто путем считывания номера версии, а затем сценария каждый раз записывал файл с именем "ver.h" с чем-то вроде:

#define MAJORVER 4
#define MINORVER 23
#define SOURCEVER 965

Затем мы будем использовать эти определения для создания строки версии.

Возможно ли что-то подобное для .NET?

Это было полезно?

Решение

Взгляните на SubWCRev — http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

Номера версий сборки обычно находятся в файле Assemblyinfo.cs.

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

Ниже приведен пример C# для автоматического обновления информации о версии в сборке.Он основан на ответе Уилла Дина, который не очень подробен.

Пример :

  1. Скопируйте AssemblyInfo.cs в AssemblyInfotemplate.cs в папке проекта Характеристики.
  2. Изменить Действие сборки к Никто для AssemblyInfoTemplate.cs.
  3. Измените строку с AssemblyFileVersion на:

    [assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

  4. Рассмотрите возможность добавления:

    [assembly: AssemblyInformationalVersion("Build date: $WCNOW=%Y-%m-%d %H:%M:%S$; Revision date: $WCDATE=%Y-%m-%d %H:%M:%S$; Revision(s) in working copy: $WCRANGE$$WCMODS?; WARNING working copy had uncommitted modifications:$.")],

    который предоставит подробную информацию о статусе версии исходного кода, из которого была собрана сборка.

  5. Добавьте следующее событие перед сборкой в ​​свойства файла проекта:

    subwcrev "$(SolutionDir)." "$(ProjectDir)Properties\AssemblyInfoTemplate.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" -f

  6. Рассмотрите возможность добавления файла AssemblyInfo.cs в список игнорирования svn.Замененные номера и даты редакций изменят файл, что приведет к незначительным изменениям и версиям, а $WCMODS$ будет оценен как true.Разумеется, файл AssemblyInfo.cs должен быть включен в проект.

В ответ на возражения Вима Коэнена я заметил, что, в отличие от того, что было предложено Дэррилом, AssemblyFileVersion также делает нет поддержка чисел выше 2^16.Строительство будет завершено, но объект недвижимости Версия файла в фактической сборке будет AssemblyFileVersion по модулю 65536.Таким образом, 1.0.0.65536, а также 1.0.0.131072 дадут 1.0.0.0 и т. д.В этом примере в свойстве AssemblyInformationalVersion всегда указан действительный номер редакции.Вы можете пропустить шаг 3, если считаете это серьезной проблемой.

Редактировать:некоторая дополнительная информация после некоторого использования этого решения.

  1. Теперь он использует AssemblyInfo.cst, а не AssemblyInfoTemplate.cs, поскольку он автоматически будет иметь Действие сборки вариант Никто, и это не будет загромождать ваш список ошибок, но вы потеряете подсветку синтаксиса.
  2. Я добавил два теста в файлы AssemblyInfo.cst:

    #if(!DEBUG)    
        $WCMODS?#error Working copy has uncommitted modifications, please commit all modifications before creating a release build.:$ 
    #endif 
    #if(!DEBUG)       
        $WCMIXED?#error Working copy has multiple revisions, please update to the latest revision before creating a release build.:$ 
    #endif
    

    Используя это, вам обычно придется выполнить полное обновление SVN после фиксации и прежде, чем вы сможете выполнить успешную сборку выпуска.В противном случае $WCMIXED будет верным.По всей видимости, это вызвано тем, что зафиксированные файлы имеют головную версию после фиксации, а другие файлы — нет.

  3. У меня были некоторые сомнения, всегда ли первый параметр 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.

Это возможно, но не следует:компоненты строки версии сборки ограничены 16-битными числами (максимум 65535).Номера ревизий Subversion могут легко стать больше, поэтому в какой-то момент компилятор внезапно начнет жаловаться.

Прочтите/просмотрите эти документы:

Доступ к репозиторию Subversion из .NET с помощью DotSVN

Как:Написать задачу

Вставьте версию SVN и номер сборки в файл C# AssemblyInfo.

Компиляция приложений с настраиваемыми задачами для Microsoft Build Engine

Версия svn MSBuildCommunityTasks, упомянутая в третьей ссылке, не будет работать с svn на Mac 10.5.6 и сборкой проекта C# VS2008 внутри Parallels, на которой размещена Vista (т. е. во всех ОС).

Напишите свою задачу по получению ревизии из репозитория с помощью 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.

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

По следующей ссылке представлен не только номер версии SNV, но и шаблон информации о дате версии.

Добавить это в проект .NET просто — нужно проделать совсем немного работы.

Вот проект github, который решает эту проблемуhttps://github.com/AndrewFreemantle/When-The-Version/downloads

Следующий URL-адрес может загружаться медленно, но он представляет собой пошаговое объяснение того, как это сделать (простые и короткие 3 или 4 шага).

http://www.fatlemon.co.uk/2011/11/wtv-automatic-date-based-version-numbering-for-net-with-whentheversion/

svn, сообщает вам версию, которую вы используете, вы можете создать событие «предварительной сборки» в VS в своем проекте, чтобы сгенерировать сборкуinfo.cs, запустив svn info и проанализировав ее результаты с помощью домашнего приложения командной строки.

Я делал это раньше, но быстро переключился на то, чтобы ccnet передавал это как переменную в nant.

Если вы хотите обновить номер версии в проекте AssemblyInfo.cs, вас может заинтересовать эта статья:

КодПроект:Используйте номера версий Subversion в своих проектах Visual Studio.

Если вы включите ключевые слова SVN, то каждый раз, когда вы регистрируете проект, Subversion сканирует ваши файлы на наличие определенных «ключевых слов» и заменяет ключевые слова некоторой информацией.

Например, в верхней части исходных файлов я бы создал заголовок, содержащий следующие ключевые слова:

'$Автор:$
'$Идентификатор:$
'$Реверс:$

Когда я проверяю этот файл в Subversion, эти ключевые слова заменяются следующими:

'$Автор:Полбеттеридж $
'$Идентификатор:myfile.vb 145 16 июля 2008 г. 15:24:29Z paulbetteridge $
'$Реверс:145 $

Вы можете использовать общий файл версии сборки, на который вы можете ссылаться во всех своих проектах.

Апперкот Означает ли это - http://ferventcoder.com/archive/2009/05/21/uppercut---automated-builds---versionbuilder.aspx

Это даст вам представление о том, что можно сделать, чтобы получить версии в сборках.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top