Сведения о вопросе

SOON

05:01, 10th August, 2020

Теги

.net   svn   versioning    

SVN редакция версии в .NET Assembly w/ из CC.NET

Просмотров: 564   Ответов: 8

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

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

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

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

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



  Сведения об ответе

baggs

06:59, 8th August, 2020

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

Пример :

  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:$.")] ,

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

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

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

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

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

Edit: некоторые дополнительные сведения после использования этого решения в течение некоторого времени.

  1. Теперь он использует AssemblyInfo.cst вместо AssemblyInfoTemplate.cs, потому что у него автоматически будет опция действия сборки None , и он не будет загромождать ваш список ошибок, но вы потеряете подсветку синтаксиса.
  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), если вы довольны, если каждый отдельный assembly находится в последовательной ревизии.

Дополнение к ответу на комментарий @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.


  Сведения об ответе

ASER

20:25, 21st August, 2020

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


  Сведения об ответе

PROGA

21:06, 1st October, 2020

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

Номера версий assembly обычно находятся в assemblyinfo.cs


  Сведения об ответе

SSESION

17:41, 19th August, 2020

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

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

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

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

Компиляция Приложений С Пользовательскими Задачами Для Microsoft Build Engine

MSBuildCommunityTasks svnversion, упомянутый в третьей ссылке, не будет работать с svn на Mac 10.5.6 и VS2008 C# project build внутри Parallels hosting 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.


  Сведения об ответе

LAST

12:45, 17th August, 2020

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

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

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

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

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

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


  Сведения об ответе

pumpa

07:37, 13th August, 2020

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

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


  Сведения об ответе

ЯЯ__4

08:10, 13th August, 2020

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

CodeProject: используйте номера версий Subversion в проектах Visual Studio

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

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

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

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

Автор: полбеттеридж $
'$Id: myfile.vb 145 2008-07-16 15:24:29Z полбеттеридж $
'$Rev: 145 $


  Сведения об ответе

VCe znayu

20:39, 16th August, 2020

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

UppercuT делает это - http://ferventcoder.com/archive/2009/05/21/uppercut---automated-builds---versionbuilder.aspx

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться