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

358

Мне было просто интересно, как я могу автоматически увеличивать сборку (и версию?) Моих файлов с помощью 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

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

РЕДАКТИРОВАТЬ: он не работает в VS2005, насколько я могу сказать ( http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx )

несмотря
источник
1
Кажется, что
подстановочные знаки
Есть ли какие-либо решения для этого, которые работают для проектов C ++ в VS2005? Все ответы, похоже, связаны с .Net. Смежный вопрос . Спасибо
Дина
В проектах .Net Core автоматическое увеличение AssemblyVersion не работает по умолчанию. Вам нужно добавить <Deterministic> False </ Deterministic> в csproj. См. Автоматическое управление версиями в Visual Studio 2017 (.NET Core)
Майкл

Ответы:

434

В 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

Сэм Мелдрум
источник
2
Это работает так же хорошо, как и все остальное, и работает в VS2005. Я надеялся на какое-то рациональное число, такое как 1.0.1.56, вместо этого я получаю 1.0.3266.30135, но по крайней мере оно увеличивается (хотя и на некоторое случайное число: D)
несмотря на
14
о, я только что прочитал: последние два числа будут автоматически заполняться датой (в днях с некоторой точки) и временем (половина секунды с полуночи)
несмотря на
20
Хороший вызов для необходимости удалить атрибут AssemblyFileVersion, чтобы заставить это работать!
Дэвид Фэйвр
76
Я понимаю, что это старый вопрос, но хотел добавить этот комментарий для тех, кто находит свой путь к этому ответу. Если вы увеличиваете AssemblyVersion, любой проект, который использует вашу DLL, необходимо будет перекомпилировать. Однако, если вы сохраните AssemblyVersion одинаковым и увеличите AssemblyFileVersion самостоятельно, то вы можете поменять новый dll без необходимости повторной компиляции того, что его использует. Так что спросите себя: это просто новая сборка или я выпускаю новую версию?
onefootswill
27
@ DD59 «Сборка» - это количество дней с 1 января 2000 года; «Ревизия» - это секунды от полуночи, разделенные на 2 (не полсекунды, а двухсекундные интервалы). Смотрите здесь: stackoverflow.com/a/3387167/11545
Кристиан Диаконеску,
154

откройте файл 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, перейдя в проект -> свойства -> информация о сборке

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

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

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

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

Спасли
источник
Да, я только что столкнулся с "" версией файла сборки: подстановочный знак ("*") не разрешен в этом поле ", вот что выиграло ваш метод зеленой галочкой: D
несмотря на
3
это работает: [assembly: AssemblyVersion ("1.0. *")] // [assembly: AssemblyFileVersion ("1.0.0.0")]
несмотря на
4
Не желательно изменять номер AssemblyVersion во время цикла выпуска. Вместо этого AssemblyFileVersion должен быть изменен. См. Мой пост в блоге на эту тему: philippetruche.wordpress.com/2008/08/12/… Также см. Отличный пост Сюзанны Кук о том, когда менять цифры: blogs.msdn.com/b/suzcook/archive/2003/05/ 29 / 57148.aspx
Филипп
46
Я был бы осторожен, используя *, он перестанет работать 4 июня 2179 года, когда день станет 65536
Ллойд Пауэлл
3
@Shimmy: добавьте <Deterministic> False </ Deterministic> в .csproj Автоматическое управление версиями в Visual Studio 2017 (.NET Core)
Майкл
53

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

<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и свойство версии .

Кристиан
источник
2
Это лучший способ, который я видел, чтобы обойти тот ужасный факт, что структуры FileVersion используют 16-битные целые числа.
Майк Пост
1
У меня были проблемы с установкой в ​​VS2012 с помощью консоли пакетов, поэтому рекомендуем использовать загруженные ночные установщики MSI по адресу github.com/loresoft/msbuildtasks/downloads . Работает копирование / вставка из вышеперечисленного. Спасибо!
DaveO
После того, как было отклонено и отредактировано в этом сообщении: «Вы также можете проверить этот loresoft.com/projects/msbuildtasks/…, это может улучшить базовую функциональность, описанную ранее».
Раду Флореску
1
Это не жизнеспособное решение для тех, кто строит с TFS. В конечном счете, это добавит ожидающие изменения в файлы VersionInfo.cs и version.txt. Для меня нежелательно иметь ожидающее редактирование для каждой сборки.
Денис
@JDennis см. Здесь для подсказок версий TFS ...
Кристиан
25

Я придумал решение, похожее на христианское, но вне зависимости от задач сообщества 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 с атрибутом Assembly для AssemblyFileVersion, в котором версия соответствует схеме YY.MM.DD.TTTT с датой сборки. Вы должны включить этот файл в свой проект и построить с ним.

Буг
источник
Поддерживает ли MSBuild переменные? Лучше было бы поместить их [System.DateTime]::Nowв одно, иначе есть условие гонки, которое может привести к тому, что старый номер сборки будет использоваться при строительстве около полуночи.
Эдвард Брей,
Вы определили эти четыре свойства вместо того, чтобы объединить их в одно DateTime.ToStringдля демонстрационных целей, или есть определенная причина?
Мафу
Если ваше событие BeforeBuild не запускается в VS2017, ознакомьтесь со stackoverflow.com/questions/43921992/…
Рис Джонс
Это решение является лучшим из всех ответов здесь. Однако проблема заключается в том, что временная метка (или содержимое файла versioninfo.cs) не обновляется, если вы собираете проект во второй раз, что должно привести к другой минуте. Если я закрою и перезагрузу проект, отметка времени будет обновлена. Это ошибка от MSBuild? @Boog
Кэри
16

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

Райан Гейтс
источник
Только для VS2005 / 2008, с бета-версией для VS2010
SteveC
autobuildversion.codeplex.com/discussions/393154 Ссылка DropBox в конце потока, начиная с r3mote203, предназначена для 2010 года и работает в 2012 году (и, возможно, в 2013 году).
Grault
2
Я использую автоматические версии для VS2012, и он работает очень хорошо.
Redcurry
12

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

 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.*")]

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

боб
источник
12

Существует визуальное расширение студии Automatic Versions, которое поддерживает Visual Studio (2012, 2013, 2015) 2017 и 2019.

Скриншоты введите описание изображения здесь

введите описание изображения здесь

Рахул
источник
Так что я удалил его, и я могу сказать даже больше ... он изменяет оригинальный файл csproj. Я думаю, что это очень проблемное расширение.
Максим
2
@Maxim Попробуйте последнюю версию, она должна работать на VS 2017
Rady
Отличная утилита У меня отлично работает в vs2017. Документы могут быть немного понятнее, но установите его (через сайт), а затем установите MSBuild через Nuget, примените к небольшому проекту, поиграйте и соберите. Ницца. Ответ @ Boog не сработал для меня, хотя он сказал именно то, чего я пытался достичь.
err1
8

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

Afaik не работал в VS 2005 (но в VS 2003 и VS 2008). Для VS 2005 вы можете использовать следующее: Автоинкремент Сборка версии Visual Studio 2005 и номер редакции во время компиляции .

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

Дирк Воллмар
источник
Я думаю, что для любой версии VS вы можете поместить только * в поля Build или Revision. Я только что попробовал это с использованием VS 2005, и он отлично работает. Я не уверен, о чем говорит автор этой статьи проекта кода.
MusiGenesis
Может быть, он вернулся с пакетом обновления, но я помню, что он не работал, когда я использовал VS 2005.
Дирк Воллмар
Это не работает с 2005 года, я буду искать пакет обновления и сообщу.
несмотря на
Возможно, в MusiGenesis установлена ​​надстройка, которая позволяет автоматическое управление версиями.
Дирк Воллмар
@ divo: нет, я аддон-фобик. У меня только Visual Studio 2005 Professional SP1. Я никогда не видел проблемы с *, но я обычно увеличиваю вручную. Звучит как странная ошибка.
MusiGenesis
6

Получить инкрементную (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, если обнаруживается достаточно большое изменение). Я сделал это однажды довольно успешно.

Андреас Рейфф
источник
Работает отлично. Однако это регулярное выражение% date: ~ -4,4%.% Date: ~ -7,2 %% date: ~ -10,2%.% Time: ~ 0,2 %% time: ~ 3,2% .% time: ~ -5,2% "слишком сложно.
Кэри,
5

Установите номер версии на «1.0. *», И он будет автоматически заполнять последние два числа с датой (в днях с некоторой точки) и временем (полсекунды с полуночи)

Джеймс Керран
источник
эй, если бы я прочитал это правильно в начале, я бы спас себя Mucho Agro. THX
несмотря на
4

Cake поддерживает исправление файлов 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 - это версия файла сборки.

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

Хэл
источник
3

Перейти к проекту | Свойства, затем Информация о сборке, а затем Версия сборки и поместите * в поле последнего или второго до последнего (вы не можете автоматически увеличивать компоненты Major или Minor).

MusiGenesis
источник
2

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

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

Рекомендуемые.

devstuff
источник
2

На данный момент, для моего заявления,

string ver = Application.ProductVersion;

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

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

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

SeaDrive
источник
Ваш номер скоро закончится. Я бы использовал yyddd, который представляет собой двухзначный год и трехзначный день от начала года, который составляет максимум 365. По крайней мере, ваша программа будет скомпилирована до 2065 года. Тогда вы выйдете на пенсию и дадите кому-нибудь другому понять, как он хочет с этим справиться. учитывая, что ваша программа все еще в комиссии на эту дату!
ААА
2

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

Maxcelcat
источник
2

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

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

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

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

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

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

<#@ 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}" #>")]

источник
Вы не компилируете свою программу каждую минуту или развертываете чаще, чем один раз в день, поэтому технически временная часть неоправданно занимает ценную информацию, я бы использовал 1-е и 2-е для старшего несовершеннолетнего и просто использовал 3-е число для даты yyddd (двузначный год + ddd день с начала того же года) и оставьте 4-й для дополнительного номера сборки.
AaA
2

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

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

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

  3. Постройте проект

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

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

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

Тельсон Альва
источник
2

В Visual Studio 2019

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

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

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

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

Решение

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

<Deterministic>false</Deterministic>

Редактировать:

По какой-то причине установка 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
Madacol
источник
1

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

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

Atiris
источник
1

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

mcandal
источник
1

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

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

Хаваджа Асим
источник
Единственная проблема с PS заключается в том, что он медленно реагирует и требует настройки для его запуска. Я бы выбрал небольшой исполняемый файл, файл tt4 или даже встроенный код, который, я думаю, любой программист может написать одним способом.
AaA
0

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

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

Брайан Кноблаух
источник
1
VS отвечает за увеличение последнего номера, который обычно является номером сборки. Все остальное (то есть цифры до этого) зависит от вас, потому что они представляют версию вашего приложения.
Огњен Шобајић
1
Огњен Шобајић: Не совсем верно. Схема нумерации Microsoft - major.minor.build.revision, например, 1.0.4.7. Если вы установите версию сборки на что-то вроде «1.0. *», Тогда VS установит для вас номера сборки и ревизии. В этом случае сборка будет увеличиваться ежедневно, а пересмотром будет количество секунд с полуночи, деленное на 2.
Саймон Тьюси
0

Для любого, кто использует Tortoise Subversion, вы можете привязать один из ваших номеров версий к номеру ревизии Subversion вашего исходного кода. Я нахожу это очень полезным (Аудитору это тоже нравится!). Вы делаете это, вызывая утилиту WCREV в вашей предварительной сборке и генерируя AssemblyInfo.cs из шаблона.

Если ваш шаблон называется AssemblyInfo.wcrev и находится в обычном каталоге AssemblyInfo.cs, а черепаха находится в каталоге установки по умолчанию, то ваша команда Pre-Build выглядит следующим образом (NB All в одной строке):

"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "$(ProjectDir)." "$(ProjectDir)Properties\AssemblyInfo.wcrev"  "$(ProjectDir)Properties\AssemblyInfo.cs"

Файл шаблона будет содержать строку замены токена wcrev: $ WCREV $
eg

[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

Примечание.
Поскольку ваш AssemblyInfo.cs теперь генерируется, вы не хотите, чтобы его версия контролировалась.

Джон Деннистон
источник