Как лучше использовать версию файла и версию сборки?

В .NET при создании проекта доступны два номера версий: Версия файла и Версия сборки. Как вы используете эти цифры? Держать их одинаковыми? Автоинкрементное одно, но другое изменение вручную?

А как насчет AssemblyInformationalVersionатрибута?

Я нашел эту статью поддержки базы знаний Майкрософт (KB), которая предоставила некоторую помощь: Как использовать версию сборки и версию файла сборки .

18.08.2008 15:10:12
Этот ответ суммирует лучшее: stackoverflow.com/a/65062/244353
Mrchief 10.07.2013 16:08:12
8 ОТВЕТОВ
РЕШЕНИЕ

В сценарии, где у меня есть несколько файловых сборок (т.е. 1 exe и 5 dll), я буду использовать различную версию файла для каждой, но одну и ту же версию сборки для всех них, что позволит вам узнать, какой exe-файл идет с каждой из dll.

14
18.08.2008 15:20:59
Что делать, если у вас есть несколько exe-файлов с различными версиями сборки в зависимости от некоторых общих DLL? Этот подход не является общим.
surfen 6.02.2012 08:55:49
Я бы предложил сделать наоборот. Сохраняйте версии сборки, специфичные для каждой библиотеки DLL (поскольку это число, которое «имеет значение» для .NET и Windows), и используйте версию файла для синхронизации идентификаторов «выпуска».
BTownTKD 9.04.2013 14:36:40

Я держу их такими же. Но тогда у меня нет многофайловых сборок, и именно тогда номер AssemblyVersion становится важным. Я использую кодировку даты в стиле Microsoft для своих номеров сборки, а не автоинкремент (я не нахожу количество раз, когда что-то создавалось, что-то столь важное).

0
18.08.2008 15:11:51
Я согласен, однако иногда полезно иметь значение, указывающее на перестройку без изменений исходного кода, например, когда команда сборки была слегка изменена, чтобы исправить конкретную проблему.
jpierson 15.09.2010 19:43:35

@ Адам: Вы меняете версию файла с каждой сборкой? Используете ли вы контроль версий (SYN или VSS) и используете эту информацию для связи источника обратно с двоичными файлами?

Кажется, имеет смысл, что версия сборки остается прежней. то есть "2.0.0.0". Это соответствует развертыванию продукта.

Версия файла изменяется в соответствии с ревизией из системы контроля версий. «2.0.??.revision» Это предоставит ссылку из определенной библиотеки DLL (или EXE-файла) на источник, который ее построил.

3
18.08.2008 15:55:13

В решениях с несколькими проектами одна вещь, которую я нашел очень полезной, состоит в том, чтобы все файлы 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
    }
}

Мой автоматизированный процесс сборки затем просто изменяет эту строку, извлекая самую последнюю версию из базы данных и увеличивая второй последний номер.

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

Я не изменяю версию файла вообще.

74
18.08.2008 16:03:33

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

Если вы измените номер версии сборки, то идентичность вашей сборки в целом изменилась. Разработчикам потребуется пересобрать, чтобы ссылаться на вашу новую версию (если вы не установили некоторую «политику» автоматического контроля версий), и во время выполнения будут загружаться только сборки с соответствующими номерами версий.

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

22
18.08.2008 17:25:54

Версии файлов используются только для целей отображения, тогда как версия сборки играет важную роль в поведении загрузки .NET.

Не совсем. Версия файла также важна для установщика Windows при обновлении существующей версии по сравнению с предыдущей.

13
12.11.2009 16:42:09

В моем текущем приложении каждый проект VS имеет ссылку на исходный файл AssemblyBuildInfo, который имеет следующие атрибуты:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyCompany("Acme Corporationy")]
[assembly: AssemblyCopyright("Copyright ©  2009 Acme Corporation")]

Таким образом, все сборки в моем решении используют одну и ту же версию и информацию о компании (то есть, если мне нужно изменить ее, я изменяю ее только один раз). Исключая FileVersion, он автоматически устанавливается на AssemblyVersion.

12
12.11.2009 16:48:08

Я написал сообщение в блоге на эту тему, которое может быть полезным для сообщества http://blog.raffaeu.com/archive/2011/12/11/sharing-assembly-version-in-visual-studio-2010.aspx

2
11.12.2011 22:14:30