Можно ли автоматически увеличивать версию сборки файла при использовании Visual Studio? - PullRequest
339 голосов
/ 10 декабря 2008

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

Если я посмотрю свойства скажем C:\Windows\notepad.exe, на вкладке Версия появится «Версия файла: 5.1.2600.2180». Я хотел бы получить эти классные цифры и в версии моей библиотеки, а не в версии 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

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

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

Ответы [ 24 ]

1 голос
/ 14 мая 2013

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

    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 (но вы должны использовать «стандартную» структуру каталогов).

0 голосов
/ 23 июня 2017

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

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

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

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

Для простоты приложение выдает сообщения только в случае ошибки, чтобы убедиться, что она работает нормально, вам нужно проверить версию файла в «Сведениях о сборке»

Примечание. Для заполнения полей необходимо перезагрузить решение в Visual Studio для кнопки «Информация о сборке», однако ваш выходной файл будет иметь обновленную версию.

Для предложений и запросов, пожалуйста, напишите мне по адресу telson_alva@yahoo.com

0 голосов
/ 24 мая 2019

В Visual Studio 2019

Мне не хватило добавления

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

При сборке выдает эту ошибку

Указанная строка версии не соответствует требуемому формату

Решение

Формат был окончательно принят после того, как я установил Deterministic на False в project.csproj

<Deterministic>false</Deterministic>

Edit:

По какой-то причине установка Deterministic в False испортила мой конфигурационный файл, загрузив его и сохранив в разных местах.

Обход:

Я установил событие после сборки, чтобы увеличить номер редакции:

Пакетный сценарий событий после сборки

Это вызывает скрипт powershell с именем autoincrement_version.ps1, передающий в качестве аргумента путь AssemblyInfo.cs

if $(ConfigurationName) == Release (
PowerShell -ExecutionPolicy RemoteSigned $(ProjectDir)autoincrement_version.ps1 '$(ProjectDir)My Project\AssemblyInfo.cs'
)

скрипт Poweshell

Он автоматически увеличивает номер ревизии с помощью Regex

param( [string]$file );
  $regex_revision = '(?<=Version\("(?:\d+\.)+)(\d+)(?="\))'
  $found = (Get-Content $file) | Select-String -Pattern $regex_revision
  $revision = $found.matches[0].value
  $new_revision = [int]$revision + 1
  (Get-Content $file) -replace $regex_revision, $new_revision | Set-Content $file -Encoding UTF8
0 голосов
/ 10 декабря 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...