Можно ли автоматически увеличить версию сборки файла при использовании Visual Studio?



Мне просто интересно, как я мог автоматически увеличить сборку (и версию?) моих файлов с помощью Visual Studio (2005).



Если я посмотрю свойства say C:Windowsnotepad.exe вкладка версия дает "версия файла: 5.1.2600.2180". Я хотел бы получить эти классные номера в версии моей dll тоже, а не версии 1.0.0.0, что давайте посмотрим правде в глаза это немного скучно.



Я пробовал несколько вещей, но это, кажется, не из коробки функциональность, или, может быть, я просто искали не в том месте (как обычно).



Я работаю в основном веб-проектами....



Я посмотрел на обоих:




  1. http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx

  2. http://www.codeproject.com/KB/dotnet/build_versioning.aspx


и я не мог поверить, что так много усилий, чтобы сделать что-то это стандартная практика.



изменить:
он не работает в VS2005 насколько я могу судить (http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx)

1053   23  

23 ответов:

в visual Studio 2008 работает следующее.

найти AssemblyInfo.cs файл и найти эти 2 строки:

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

вы можете попробовать изменить это на:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]

но это не даст вам желаемого результата, вы получите версию продукта 1.0.* и файловая версия 1.0.0.0. Не то, что ты хочешь!

однако, если вы удалите вторую из этих строк и просто есть:

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

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

откройте AssemblyInfo.cs файл и изменение

// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

до

[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]

вы можете сделать это в IDE, перейдя в project - > properties - > assembly information

это, однако, позволит вам только автоматически увеличить версию сборки и даст вам

версия файла сборки: подстановочный знак ( " * " ) не допускается в этом поле

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

Так что просто откройте assemblyinfo.CS и сделать это вручную.

другой вариант для изменения номеров версий в каждой сборке-использовать версия задание MSBuild.Сообщество.Задачи. Просто загрузите их установщик, установите его, затем адаптируйте следующий код и вставьте его после <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> в своем .csproj file:

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="BeforeBuild">
    <Version VersionFile="Properties\version.txt" Major="1" Minor="0" BuildType="Automatic" StartDate="12/31/2009" RevisionType="BuildIncrement">
      <Output TaskParameter="Major" PropertyName="Major" />
      <Output TaskParameter="Minor" PropertyName="Minor" />
      <Output TaskParameter="Build" PropertyName="Build" />
      <Output TaskParameter="Revision" PropertyName="Revision" />
    </Version>
    <AssemblyInfo CodeLanguage="CS"
                  OutputFile="Properties\VersionInfo.cs"
                  AssemblyVersion="$(Major).$(Minor)"
                  AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" />
</Target>

Примечание: адаптировать свойство StartDate к вашей локали. в настоящее время он не использует инвариантную культуру.

для третьей сборки в январе 14 марта 2010 года, это создает VersionInfo.cs С таким содержанием:

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.14.2")]
этот файл должен быть добавлен в проект (через добавить существующий элемент), и AssemblyVersion и AssemblyFileVersion строки должны быть удалены от AssemblyInfo.cs.

различные алгоритмы изменения компонентов версии описаны в $(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chm и Свойства.

Я придумал решение, похожее на христиан, но без зависимости от задач сообщества MSBuild, это не вариант для меня, поскольку я не хочу устанавливать эти задачи для всех наших разработчиков.

я генерирую код и компилирую его в сборку и хочу автоматически увеличивать номера версий. Однако я не могу использовать VS 6.0.* Трюк AssemblyVersion, поскольку он автоматически увеличивает номера сборки каждый день и нарушает совместимость со сборками, которые используют более старый номер сборки. Вместо этого я хочу иметь жестко закодированную AssemblyVersion, но автоматически увеличивающуюся AssemblyFileVersion. Я сделал это, указав AssemblyVersion в AssemblyInfo.cs и создание VersionInfo.cs в MSBuild вот так,

  <PropertyGroup>
    <Year>$([System.DateTime]::Now.ToString("yy"))</Year>
    <Month>$([System.DateTime]::Now.ToString("MM"))</Month>
    <Date>$([System.DateTime]::Now.ToString("dd"))</Date>
    <Time>$([System.DateTime]::Now.ToString("HHmm"))</Time>
    <AssemblyFileVersionAttribute>[assembly:System.Reflection.AssemblyFileVersion("$(Year).$(Month).$(Date).$(Time)")]</AssemblyFileVersionAttribute>
  </PropertyGroup>
  <Target Name="BeforeBuild">
    <WriteLinesToFile File="Properties\VersionInfo.cs" Lines="$(AssemblyFileVersionAttribute)" Overwrite="true">
    </WriteLinesToFile>
  </Target>

это создаст VersionInfo.cs-файл с атрибутом сборки для AssemblyFileVersion, где версия следует схеме YY.MM.DD.TTTT с датой сборки. Вы должны включить этот файл в ваш проект и построить с ним.

установить Увеличение Версии Сборки надстройки. Это дает вам больше контроля, чем опция*.

чтобы получить номера версий попробуйте

 System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
 System.Reflection.AssemblyName assemblyName = assembly.GetName();
 Version version = assemblyName.Version;

чтобы задать номер версии, создайте / отредактируйте AssemblyInfo.cs

 [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyFileVersion("1.0.*")]

также в качестве примечания, третье число-это количество дней с 2/1/2000, а четвертое число-половина от общего количества секунд в день. Так что если вы компилируете в полночь он должен быть равен нулю.

установка a * в номере версии в AssemblyInfo или в разделе свойства проекта, как описано в других сообщениях, не работает со всеми версиями Visual Studio/. NET.

Afaik он не работал в VS 2005 (но в VS 2003 и VS 2008). Для VS 2005 вы можете использовать следующее:Auto Increment Visual Studio 2005 version build and revision number on compile time.

но имейте в виду, что автоматическое изменение номера версии не рекомендуется для сборок со строгими именами. Причина заключается в том, что все ссылки на такую сборку должны обновляться каждый раз при перестроении указанной сборки из-за того, что ссылки на сборки со строгими именами всегда являются ссылками на конкретную версию сборки. Сами корпорации Майкрософт изменяют номер версии сборок .NET Framework только при наличии изменений в интерфейсах. (NB: я все еще ищу ссылку в MSDN, где я это прочитал.)

установите номер версии "1.0.* "и он автоматически заполнит последние два числа с датой (в днях от некоторого момента) и временем (половина секунды от полуночи)

чтобы получить информацию о приращении (DateTime) в свойство AssemblyFileVersion, которое имеет преимущество не нарушать никаких зависимостей.


опираясь на решение Boog (не работает для меня, может быть, из-за VS2008?), вы можете использовать комбинацию событий предварительной сборки, генерирующих файл, добавляя этот файл (включая его свойства версии), а затем используя способ считывания этих значений снова. Что есть..

Pre-Build-Event:

echo [assembly:System.Reflection.AssemblyFileVersion("%date:~-4,4%.%date:~-7,2%%date:~-10,2%.%time:~0,2%%time:~3,2%.%time:~-5,2%")] > $(ProjectDir)Properties\VersionInfo.cs

включить результирующую VersionInfo.cs-файл (подпапка свойств) в ваш проект

код для возврата даты (лет до секунд):

var version = assembly.GetName().Version;
var fileVersionString = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion;
Version fileVersion = new Version(fileVersionString);
var buildDateTime = new DateTime(fileVersion.Major, fileVersion.Minor/100, fileVersion.Minor%100, fileVersion.Build/100, fileVersion.Build%100, fileVersion.Revision);

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

вы могли бы сделать его умнее, например, если вы только обновить VersionInfo.cs-файл каждые несколько минут / часов (с помощью временного файл, а затем копирование / перезапись реального VersionInfo.cs, если обнаружено достаточно большое изменение). Я сделал это однажды довольно успешно.

есть расширение visual studio Автоматические Версии который поддерживает Visual Studio 2012, 2013, 2015 и 2017.

Скриншоты enter image description here

enter image description here

Он находится в свойствах вашего проекта под публикации

http://screencast.com/t/Vj7rhqJO
(~ http://screencast.com/t/Vj7rhqJO)

торт поддерживает исправление файлов AssemblyInfo. С тортом в руках у вас есть бесконечные способы реализации автоматического увеличения версии.

простой пример увеличения версии, как компилятор C# делает:

Setup(() =>
{
    // Executed BEFORE the first task.
    var datetimeNow = DateTime.Now;
    var daysPart = (datetimeNow - new DateTime(2000, 1, 1)).Days;
    var secondsPart = (long)datetimeNow.TimeOfDay.TotalSeconds/2;
    var assemblyInfo = new AssemblyInfoSettings
    {
        Version = "3.0.0.0",
        FileVersion = string.Format("3.0.{0}.{1}", daysPart, secondsPart)
    };
    CreateAssemblyInfo("MyProject/Properties/AssemblyInfo.cs", assemblyInfo);
});

здесь:

  • версия - это версия сборки. Рекомендуется заблокировать основной номер версии и оставить оставшийся с нулями (например, "1.0.0.0").
  • FileVersion-это файл сборки версия.

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

перейдите в проект / свойства, а затем информацию о сборке, а затем версию сборки и поместите * в последнее или предпоследнее поле (вы не можете автоматически увеличивать Основные или второстепенные компоненты).

используйте задачу AssemblyInfo из задач сообщества MSBuild (http://msbuildtasks.tigris.org/) проект, и интегрировать его в свой .csproj/.файл vbproj.

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

рекомендуется.

На данный момент, для моего приложения,

string ver = Application.ProductVersion;

возвращает ver = 1.0.3251.27860

значение 3251-это количество дней с 1/1/2000. Я использую его, чтобы поставить дату создания версии на заставке моего приложения. Когда я имею дело с пользователем, я могу спросить дату создания, которая легче общаться, чем какое-то длинное число.

(Я один человек отдел поддержки небольшой компании. Этот подход может не работать для вас.)

изменение AssemblyInfo работает в VS2012. Кажется странным, что в Visual Studio нет больше поддержки для этого, вы бы подумали, что это была основная часть процесса сборки/выпуска.

Как получить версию {major}.{year}.1{date}.1{time}

это своего рода эксперимент, но мне это нравится. Вдохновлен Джеффом Этвудом @ CodingHorror (ссылке).

полученный номер версии 1.2016.10709.11641 (что означает 2016-07-09 16: 41), что позволяет

  • бедняга нулевой обивка (с глупым ведущим 1 s)
  • почти-удобочитаемое local DateTime встроен в версию номер
  • оставляя основную версию в покое для действительно серьезных изменений.

добавьте новый элемент в свой проект, выберите Общие - > текстовый шаблон, назовите его чем-то вроде CustomVersionNumber и (где применимо) прокомментируйте AssemblyVersion и AssemblyFileVersion на Properties/AssemblyInfo.cs.

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

<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>

//
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
//

using System.Reflection;

<#
    var date = DateTime.Now;
    int major = 1;
    int minor = date.Year;
    int build = 10000 + int.Parse(date.ToString("MMdd"));
    int revision = 10000 + int.Parse(date.ToString("HHmm"));
#>

[assembly: AssemblyVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]
[assembly: AssemblyFileVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]

возможно, для этой задачи можно использовать такой код:

    private bool IncreaseFileVersionBuild()
    {
        if (System.Diagnostics.Debugger.IsAttached)
        {
            try
            {
                var fi = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.GetDirectories("Properties")[0].GetFiles("AssemblyInfo.cs")[0];
                var ve = System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
                string ol = ve.FileMajorPart.ToString() + "." + ve.FileMinorPart.ToString() + "." + ve.FileBuildPart.ToString() + "." + ve.FilePrivatePart.ToString();
                string ne = ve.FileMajorPart.ToString() + "." + ve.FileMinorPart.ToString() + "." + (ve.FileBuildPart + 1).ToString() + "." + ve.FilePrivatePart.ToString();
                System.IO.File.WriteAllText(fi.FullName, System.IO.File.ReadAllText(fi.FullName).Replace("[assembly: AssemblyFileVersion(\"" + ol + "\")]", "[assembly: AssemblyFileVersion(\"" + ne + "\")]"));
                return true;
            }
            catch
            {
                return false;
            }
        }
        return false;
    }

и вызвать его из загрузки формы.
С помощью этого кода Вы можете обновить любую часть информации о файле в AssemblyInfo.cs (но вы должны использовать "стандартную" структуру каталогов).

AssemblyInfoUtil. Бесплатный. Открытый исходный код.

Я использую этот подход https://stackoverflow.com/a/827209/3975786 поместив шаблон T4 в "элементы решения" и используя его с "Добавить как ссылку" в каждом проекте.

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

автоматическое способ изменить версию сборки всех ваших проектов с помощью скрипта PowerShell. в этой статье решит многие из ваших проблем.

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

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

Я создал приложение для автоматического увеличения версии файла.

  1. скачать приложение
  2. добавьте следующую строку в командную строку события предварительной сборки

    C:\temp\IncrementFileVersion.exe $(SolutionDir)\Properties\AssemblyInfo.cs

  3. построить проект

чтобы сохранить его простым приложение только бросает сообщения, если есть ошибка, чтобы подтвердить его работу отлично вам нужно будет проверить версию файла в 'Assembly Information'

Примечание: вам придется перезагрузить решение в Visual studio для кнопки "сведения о сборке", чтобы заполнить поля, однако ваш выходной файл будет иметь обновленную версию.

для предложений и запросов, пожалуйста, напишите Мне по адресу [email protected]

Comments

    Ничего не найдено.