Как лучше всего использовать версию файла и версию сборки?
-
08-06-2019 - |
Вопрос
В .NET при сборке проекта доступны два номера версий: версия файла и Версия сборки.Как вы используете эти цифры?Оставить их прежними?Автоматически увеличивать один, но вручную изменять другой?
Кроме того, как насчет AssemblyInformationalVersion
атрибут?
Я нашел эту статью о поддержке базы знаний Microsoft (KB), которая оказала некоторую помощь: Как использовать версию сборки и версию файла сборки.
Решение
В сценарии, где у меня есть несколько файловых сборок (т. е.1 exe-файл и 5 dll-файлов) Я буду использовать разные версии файлов для каждого, но одну и ту же версию сборки для всех них, что позволит вам узнать, с каким exe-файлом поставляется каждая из dll.
Другие советы
В решениях с несколькими проектами одна вещь, которую я нашел очень полезной, - это то, что все файлы AssemblyInfo указывают на один проект, который управляет управлением версиями.Итак, в моей AssemblyInfos есть строка:
[assembly: AssemblyVersion(Foo.StaticVersion.Bar)]
У меня есть проект с одним файлом, в котором объявляется строка:
namespace Foo
{
public static class StaticVersion
{
public const string Bar= "3.0.216.0"; // 08/01/2008 17:28:35
}
}
Затем мой автоматизированный процесс сборки просто изменяет эту строку, извлекая самую последнюю версию из базы данных и увеличивая предпоследнее число.
Я меняю Основной номер сборки только тогда, когда набор функций резко меняется.
Я вообще не меняю версию файла.
В статье KB упоминается наиболее важное различие:Версии файлов используются только для отображения, в то время как версия сборки играет важную роль в .Поведение при загрузке по СЕТИ.
Если вы измените номер версии сборки, то изменится идентификатор вашей сборки в целом.Разработчикам потребуется перестроить, чтобы ссылаться на вашу новую версию (если только вы не установили какую-либо "политику" автоматического управления версиями), и во время выполнения будут загружены только сборки с соответствующими номерами версий.
Это важно в моей среде, где нам нужен увеличивающийся, хорошо видимый номер версии для целей аудита, но мы не хотим заставлять разработчиков перестраивать или запускать несколько версий одновременно в рабочей среде.В этом случае для внесения незначительных изменений с обратной совместимостью мы обновляем версию файла, но не версию сборки.
Версии файлов используются только для отображения, в то время как версия сборки играет важную роль в .Поведение при загрузке по СЕТИ.
Не совсем.Версия файла также важна для установщика Windows, когда вы обновляете существующую версию поверх предыдущей.
В моем текущем приложении каждый проект VS имеет ссылку на исходный файл "AssemblyBuildInfo", который имеет следующие атрибуты:
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyCompany("Acme Corporationy")]
[assembly: AssemblyCopyright("Copyright © 2009 Acme Corporation")]
Таким образом, все сборки в моем решении используют одну и ту же версию и информацию о компании (это означает, что если мне нужно ее изменить, я меняю ее только один раз).При исключении FileVersion для него автоматически устанавливается AssemblyVersion.
@Адам:Вы меняете версию файла при каждой сборке?Используете ли вы систему управления версиями (SYN или VSS) и используете ли эту информацию для обратной связи исходного кода с двоичными файлами?
Кажется логичным, что версия сборки остается прежней.т. е."2.0.0.0".Это соответствует развертыванию продукта.
Версия файла изменяется в соответствии с версией из системы управления версиями."2.0.??.revision" Это предоставит ссылку из определенной библиотеки dll (или exe) на исходный код, который ее создал.
Я написал сообщение в блоге на эту тему, которое может быть полезно сообществу http://blog.raffaeu.com/archive/2011/12/11/sharing-assembly-version-in-visual-studio-2010.aspx
Я оставляю их прежними.Но тогда у меня нет многофайловых сборок, и именно тогда номер AssemblyVersion становится важным.Я использую кодировку даты в стиле Microsoft для своих номеров сборки, а не автоматическое увеличение (я не считаю, что количество раз, когда что-то было создано, настолько важно).