Что не так с моим автоматически увеличивающимся синтаксисом номера сборки в Visual Studio?

Я знаю, что Visual Studio не может увеличить номер сборки так, как этого ожидают люди, но она поддерживает рандомизацию номера сборки:

мой AssemblyInfo.cs файл содержит:

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// 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.*")]
[assembly: AssemblyFileVersion("1.0.*")]

И все же это дает, как мне кажется, бессмысленные результаты (даже с учетом псевдослучайных номеров версий Visual Studio):альтернативный текст

Итак, более простой вопрос:

Что я вкладываю в AssemblyInfo.cs заставить это работать?

Из MSDN (переформатировано для ясности):

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

[assembly:AssemblyVersion("2.3.25.1")]

указывает 2 в качестве основной версии, 3 в качестве вспомогательной версии, 25 в качестве номера сборки и 1 в качестве номера редакции. Номер версии, такой как

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

указывает 1 в качестве основной версии, 2 в качестве вспомогательной версии и принимает номера сборки и ревизии по умолчанию. Номер версии, такой как

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

указывает 1 в качестве основной версии, 2 в качестве вспомогательной версии, 15 в качестве номера сборки и принимает номер версии по умолчанию.

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

я понимаю, что это означает, что номера версий:

[1.0.0.0]
major.minor.build.revision

в то время как

[1.0.0.*]
major.minor.build.[random]

а также

[1.0.*]
major.minor.[daynumber].[random]

2 ответа

Решение

Я на 99% уверен, что проблема, с которой вы столкнулись, вызвана этой строкой:

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

Подвох в том, что Visual Studio не поддерживает автоинкремент AssemblyFileVersion , только AssemblyVersion, Так что остальная часть вашего кода должна быть в порядке. Попробуйте просто закомментировать эту вторую строку и посмотреть, получите ли вы ожидаемые результаты. Вся информация о версии вашего файла и продукта должна быть эквивалентной.

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

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

На снимке экрана показано использование обработчика расширения листа свойств оболочки, который отображает ресурс неуправляемой версии, встроенный в большинство файлов EXE и DLL, включая файлы.NET. К сожалению, начиная с Vista, этот обработчик больше не отображает необязательные поля в этом ресурсе. Поле ProductVersion является стандартным, но не является [AssemblyVersion]. Вы должны добавить соответствующий атрибут в AssemblyInfo.cs. Например:

[Assembly: AssemblyInformationalVersion("1.2.3.4")]

К сожалению, имя не очень подходит. Если он отсутствует, компилятор скопирует значение [AssemblyVersion], вот как вы получили звездочку.

Компилятор действительно выдает дополнительное поле в ресурсе. Вы можете увидеть это с помощью File + Open + File, выбрать свою сборку, открыть узел Version и дважды щелкнуть ресурс #1:

альтернативный текст

Который был сгенерирован из:

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

Это там, вы просто не можете видеть в Проводнике. Облом, надеюсь, они когда-нибудь исправят это. Также обратите внимание на сгенерированный [AssemblyVersion], номер ревизии 18404. Это не случайно, я собрал этот EXE в 10:13 утра. Это было 18404 * 2 секунды с полуночи.

Другие вопросы по тегам