2008-08-18 7 views
54

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

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

Я нашел эту статью Microsoft Knowledge Base (KB), которая предоставила некоторую помощь: How to use Assembly Version and Assembly File Version.

+1

Этот ответ суммирует самое лучшее: http://stackoverflow.com/a/65062/244353 – Mrchief 2013-07-10 16:08:12

ответ

14

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

+2

Что делать, если у вас есть несколько exes с различными версиями сборки в зависимости от некоторых общих dll? Этот подход не является общим. – surfen 2012-02-06 08:55:49

+5

Я бы предложил сделать наоборот. Сохраняйте версии Assembly для каждой DLL (так как это число имеет значение «.NET» и «Windows»), и используйте версию файла для синхронизации идентификаторов «выпуска». – BTownTKD 2013-04-09 14:36:40

0

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

+1

Я согласен, однако иногда его полезно чтобы иметь значение, указывающее на перестройку без изменений исходного кода, например, когда команда сборки была слегка изменена, чтобы исправить конкретную проблему. – jpierson 2010-09-15 19:43:35

3

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

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

Версия файла изменяется в соответствии с версией исходного элемента управления. «2.0.v.revision» Это обеспечило бы ссылку из определенной dll (или exe) в источник, который ее построил.

73

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

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

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

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

+7

+1 Отличное решение для обмена номера версии. – 2009-11-12 16:44:16

22

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

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

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

12

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

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

11

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

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

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