Как получить автоматически увеличивающийся номер версии (Visual Studio)? [Дубликат]

Вызов конструктора из другого конструктора

class MyConstructorDemo extends ConstructorDemo
{
    MyConstructorDemo()
    {
        this("calling another constructor");
    }
    MyConstructorDemo(String arg)
    {
        System.out.print("This is passed String by another constructor :"+arg);
    }
}

Также вы можете вызвать родительский конструктор с помощью super() вызова

436
задан esac 6 July 2015 в 18:29
поделиться

6 ответов

Если вы добавите класс AssemblyInfo в свой проект и измените атрибут AssemblyVersion так, чтобы он заканчивался звездочкой, например:

[assembly: AssemblyVersion("2.10.*")]

Visual Studio будет увеличивать конечное число для Вы согласно этим правилам (спасибо, галец, я ошибся!)

Чтобы ссылаться на эту версию в коде, чтобы вы могли отобразить ее пользователю, вы используете отражение. Например,

Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
DateTime buildDate = new DateTime(2000, 1, 1)
                        .AddDays(version.Build).AddSeconds(version.Revision * 2);
string displayableVersion = $"{version} ({buildDate})";

Две важные ошибки, которые вы должны знать

От @ ashes999:

Стоит также отметить, что если указаны оба AssemblyVersion и AssemblyFileVersion , вы выиграли не вижу это на вашем .exe. 3-е число - это количество дней с 2000 года, а 4-е число - это количество секунд с полуночи (деленное на 2) [ЭТО НЕ СЛУЧАЙНО]. Таким образом, если вы создали решение в конце дня, а в начале дня на следующий день, у более поздней сборки будет более ранний номер версии. Я рекомендую всегда использовать XY * вместо XYZ * , потому что номер вашей версии ВСЕГДА будет увеличиваться.

592
ответ дан 22 November 2019 в 23:03
поделиться

Использовать AssemblyInfo.cs

Создайте файл в App_Code: и заполните следующее или используйте Google для других возможностей атрибутов / свойств.

AssemblyInfo.cs

using System.Reflection;

[assembly: AssemblyDescription("Very useful stuff here.")]
[assembly: AssemblyCompany("companyname")]
[assembly: AssemblyCopyright("Copyright © me 2009")]
[assembly: AssemblyProduct("NeatProduct")]
[assembly: AssemblyVersion("1.1.*")]

AssemblyVersion является часть, за которой вы действительно следите.

Затем, если вы работаете на веб-сайте, на любой странице aspx или в элементе управления, вы можете добавить в тег следующее:

CompilerOptions="<folderpath>\App_Code\AssemblyInfo.cs"

(заменяя folderpath на соответствующую переменную, разумеется, ).

Я не думаю, что вам нужно каким-либо образом добавлять опции компилятора для других классов; все они в App_Code должны получать информацию о версии при компиляции.

Надеюсь, это поможет.

15
ответ дан 22 November 2019 в 23:03
поделиться

Вот цитата для AssemblyInfo.cs из MSDN :

Вы можете указать все значения или может принять номер сборки по умолчанию, номер редакции или оба с помощью звездочка (). Например, [Сборка: AssemblyVersion ( "2.3.25.1")] обозначает 2 как основную версию, 3 как минорная версия, 25 как сборка номер, и 1 как номер редакции. Номер версии, такой как [Сборка: AssemblyVersion ( "1.2 ")] указывает 1 как основную версию, 2 как минорная версия, и принимает номера сборки и ревизии по умолчанию. номер версии, такой как [Сборка: AssemblyVersion ( "1.2.15 *")] указывает 1 как основную версию, 2 как минорная версия, 15 как сборка номер, и принимает по умолчанию номер ревизии. Сборка по умолчанию число увеличивается ежедневно. По умолчанию номер ревизии является случайным

. Это фактически говорит о том, что если вы поместите 1.1. * в информацию о сборке, только номер сборки будет автоматически инкрементироваться, и это произойдет не после каждой сборки, а ежедневно. Номер редакции будет меняться при каждой сборке, но случайным образом, а не в возрастающем порядке.

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

23
ответ дан 22 November 2019 в 23:03
поделиться

Вы можете попробовать использовать UpdateVersion Мэтта Гриффита . Сейчас оно довольно старое, но работает хорошо. Чтобы использовать его, вам просто нужно настроить событие перед сборкой, которое указывает на ваш файл AssemblyInfo.cs, и приложение обновит номера версий соответственно, в соответствии с аргументами командной строки.

Поскольку приложение является открытым исходным кодом Я также создал версию для увеличения номера версии, используя формат (Основная версия). (Малая версия). ([Год] [dayofyear]). (Увеличение) . Дополнительная информация об этом и пересмотренном коде доступна в моей записи блога, Номера версий сборок и .NET .

Обновление: я поместил код для моей модифицированной версии приложения UpdateVersion на GitHub: https: // GitHub. com / munr / UpdateVersion

10
ответ дан 22 November 2019 в 23:03
поделиться

Вы можете использовать механизм шаблонов T4 в Visual Studio для генерации необходимого исходного кода из простого текстового файла :

Я хотел настроить генерацию информации о версии для некоторых .СЕТЬ проекты. Прошло много времени с тех пор, как я исследовал доступные варианты, поэтому я искал вокруг в надежде найти какой-то простой способ сделать этот. То, что я нашел, не выглядело очень обнадеживающим: люди пишут Надстройки Visual Studio и пользовательские задачи MsBuild только для получения одного целое число (хорошо, может быть два). Это было излишним для небольшого персональный проект.

Вдохновение пришло от одного из обсуждений StackOverflow, где кто-то предположил, что шаблоны T4 могут сделать эту работу. И конечно они могут. Решение требует минимальных усилий и не требует Visual Studio или настройка процесса сборки. Вот что нужно сделать:

  1. Создайте файл с расширением «.tt» и поместите туда шаблон T4, который будет генерировать атрибуты AssemblyVersion и AssemblyFileVersion:
<#@ template language="C#" #>
// 
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
// 

using System.Reflection;

[assembly: AssemblyVersion("1.0.1.<#= this.RevisionNumber #>")]
[assembly: AssemblyFileVersion("1.0.1.<#= this.RevisionNumber #>")]
<#+
    int RevisionNumber = (int)(DateTime.UtcNow - new DateTime(2010,1,1)).TotalDays;
#>

Вам нужно будет решить вопрос об алгоритме генерации номера версии. Для мне было достаточно, чтобы автоматически сгенерировать номер ревизии, который установлен в количество дней с 1 января 2010 года. Как видите, Правило генерации версий написано на простом C #, так что вы можете легко настройте его под свои нужды.

  1. Файл выше должен быть размещен в одном из проектов. Я создал новый проект только с этим одним файлом, чтобы сделать управление версиями техника понятна. Когда я строю этот проект (на самом деле мне даже не нужно построить его: достаточно сохранить файл, чтобы запустить Visual Studio действие), генерируется следующий C #:
// 
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
// 

using System.Reflection;

[assembly: AssemblyVersion("1.0.1.113")]
[assembly: AssemblyFileVersion("1.0.1.113")]

Да, сегодня это 113 дней с 1 января 2010 года. Завтра номер редакции изменится.

  1. Следующим шагом будет удаление атрибутов AssemblyVersion и AssemblyFileVersion из файлов AssemblyInfo.cs во всех проектах, которые должны поделиться той же автоматически сгенерированной информацией о версии. Вместо этого выберите «Добавить» существующий элемент »для каждого проекта, перейдите в папку с T4 файл шаблона, выберите соответствующий файл «.cs» и добавьте его в качестве ссылки. Это подойдет!

Что мне нравится в этом подходе, так это то, что он легкий (без пользовательских Задачи MsBuild), и автоматически генерируемая информация о версии не добавляется в управления источником. И, конечно, используя C # для генерации версий Алгоритм открыт для алгоритмов любой сложности.

157
ответ дан 22 November 2019 в 23:03
поделиться

Вы можете делать более сложные версии, используя такие сценарии сборки, как Build Versioning

2
ответ дан 22 November 2019 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: