Система автонумерации билдов.
От: xtile  
Дата: 03.03.04 15:55
Оценка:
Подскажите, в какую сторону копать, может кто сталкивался ?

В поисковиках не нашел.

Нужно, чтобы при каждой полной сборке проекта автоматически увеличивался номер версии.
Re: Система автонумерации билдов.
От: Воронков Василий Россия  
Дата: 03.03.04 17:19
Оценка: 2 (1)
Здравствуйте, xtile, Вы писали:

Осмелюсь предложить собственное решение данной проблемы. Я написал небольшое консольное приложение, которое запускается в post-build event и как раз и занимается тем, что инкрементит версию сборки. Заранее предупреждаю, что делает оно это так, как нравится мне. Я интерпретирую версии в дотнете следующим образом:

[MajorRevision].[MinorRevision].[ReleaseBuild].[DebugBuild]


Первые два ревижина соответственно не инкрементятся — только последние два в зависимости от конфигурации.
Общий принцип работы таков: файл AssemblyInfo.cs заменяется на файл AssemblyInfo.xml, в котором и прописываются все данные на уровне атрибутов сборки. AssemblyInfo.cs же генерируется динамически (через кодедом) при каждом билде. Благодаря использованию кодедома можно, подправив буквально одну строчку использовать тулзу для проектов на васике или жабе.
Значит как использовать. Пропишите в post-build event проекта соедующее:

[Path]\vi.exe $(ConfigurationName) "$(ProjectDir)


После чего можно билдить проект. Имейте в виду, что AssemblyInfo.cs будет перезаписан — соотв. все данные в нем будут утеряны. При первом запуске тулза создаст файл AssemblyInfo.xml. В этот файл и надо будет теперь вносить все изменения в assembly:attributes. Допускается также добавление собственных атрибутов. Только нужно указывать неймспейс, в котором они содержатся. Например:
<AssemblySupportEmail ns="MyProg.Attributes">smbd@dot.com</AssemblySupportEmail>
Я также советую вообще скрыть с глаз долой AssemblyInfo.cs, сделав его подчиненным файлом xml-я. Это можно провернуть, подправив ручками файл проекта, добавив в него такую строчку:

<File
            RelPath = "AssemblyInfo.xml"
            BuildAction = "Content"
    />
    <File
            RelPath = "AssemblyInfo.cs"
          DependentUpon = "AssemblyInfo.xml"
            SubType = "Code"
            BuildAction = "Compile"
    />


После этого AssemblyInfo.cs будет отображаться лишь в режиме просмотра всех файлов проекта как подчиненный файл хмл-я.

Ну и наконец сурсы тулзы:
http://www.rsdn.ru:80/File/16070/Incrementer.cs
... << RSDN@Home 1.1.3 stable >>
Re[2]: Система автонумерации билдов.
От: V.Petrovski Беларусь  
Дата: 03.03.04 17:44
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

А вот мое простое решение проблемы.

В имеющийся solution добавим проект например Version.
Этот просто проект в котором есть класс

using System;

namespace Version
{
    /// <summary>
    /// Класс, определющий версию для компонент
    /// </summary>
    public class AssemblyBuild
    {
        /// <summary>
        /// Build
        /// </summary>
        public const String Build = "170";
        /// <summary>
        /// Revision
        /// </summary>
        public const String Revision = "0";
    }
}


Теперь довавим ссылку на этот проект и извеним AssemblyInfo.cs

 [assembly: AssemblyVersion("1.3." + Version.AssemblyBuild.Build + "." + Version.AssemblyBuild.Revision)]


Вот вся малина, этот проект в манифест ссылающихся не прописывается т.к мы используем константные значения.
Осталось только написать маленький bat файл(прогу) который меняет значения Build и Revision или генерит новый файл по шаблону.

:MakeVersion
@echo off
ECHO using System;
ECHO.
ECHO namespace %VersionNamespace%
ECHO {
ECHO     /// ^<summary^>
ECHO     ///  Класс, определющий версию для компонент
ECHO     /// ^</summary^>
ECHO     public class AssemblyBuild
ECHO     {
ECHO         /// ^<summary^>
ECHO         /// Build
ECHO         /// ^</summary^>
ECHO         public const String Build = "%Build%";
ECHO         /// ^<summary^>
ECHO         /// Revision
ECHO         /// ^</summary^>
ECHO         public const String Revision = "%Revision%";
ECHO     }
ECHO }
EXIT /B 0
... << RSDN@Home 1.1.2 stable Deadушки — 03 — Сальери>>
Re[2]: Система автонумерации билдов.
От: mudagen  
Дата: 03.03.04 17:45
Оценка:
А чем вас собственно не устраивает встроенное средство в VS.NET?
Re[3]: Система автонумерации билдов.
От: Воронков Василий Россия  
Дата: 03.03.04 17:55
Оценка:
Здравствуйте, mudagen, Вы писали:

M>А чем вас собственно не устраивает встроенное средство в VS.NET?


AssemblyVersion студия инкрементить не умеет.
... << RSDN@Home 1.1.3 stable >>
Re[3]: Система автонумерации билдов.
От: Воронков Василий Россия  
Дата: 03.03.04 17:56
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>Здравствуйте, Воронков Василий, Вы писали:


VP>А вот мое простое решение проблемы.


А чем это проще? Придется постоянно держать в солюшине лишний проект. В этом плане мое средство попроще будет. Да и когда там немного в принципе.
... << RSDN@Home 1.1.3 stable >>
Re: Система автонумерации билдов.
От: HotDog Швейцария www.denebspace.com
Дата: 04.03.04 15:16
Оценка:
Здравствуйте, xtile, Вы писали:

X>Нужно, чтобы при каждой полной сборке проекта автоматически увеличивался номер версии.


http://www.codeproject.com/dotnet/VersioningControlledBuild.asp
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.