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

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

Если я просматриваю свойства, скажем, C:\Windows\notepad.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)

🤔 А знаете ли вы, что...
С C# можно разрабатывать веб-приложения с использованием ASP.NET и ASP.NET Core.


372
219 759
25

Ответы:

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

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


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


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

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

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


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

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

Assembly File Version: A wildcard ("*") is not allowed in this field

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

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


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


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

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


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

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

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


Решено

В 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


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

string ver = Application.ProductVersion;

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

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

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


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

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

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