Должны ли имена .NET Assembly включать номер версии? - PullRequest
9 голосов
/ 22 ноября 2008

В настоящее время мы горячо спорим о том, должно ли фактическое имя сборки .NET включать номер версии кода (например, CodeName02.exe или CompanyName.CodeName02.dll). Кто-нибудь знает авторитетный источник, такой как Microsoft, который предоставляет руководство по этому вопросу?

Ответы [ 9 ]

12 голосов
/ 22 ноября 2008

Для этого предназначен файл Properties / AssemblyInfo.cs.

В этом файле есть две версии: версия файла и версия сборки:

[assembly: AssemblyVersion("1.1.0.256"]
[assembly: AssemblyFileVersion("1.1.0.256")]

Как только они установлены, вы можете использовать их для отслеживания версий ваших двоичных файлов. Это легко просмотреть в проводнике, щелкнув правой кнопкой мыши -> Свойства.

Ни одно из имен dll или exe, включенных в приложения (и ОС) Microsoft, не используют это соглашение.

Другие системы будут использовать эти числа для разрешения зависимостей и проверки версии. Например, система MSI обновит двоичные файлы на основе свойств версии.

8 голосов
/ 22 ноября 2008

Руководство по проектированию фреймворка от Кшиштоф Квалина и Брэд Абрамс корпорации Microsoft предлагает именование сборок, например

<Company>.<Component>.dll

Я также поддерживаю это (НЕ используя версию #), потому что свойства файла GAC и dll покажут версию.

3 голосов
/ 11 февраля 2009

Я знаю, что DevExpress веб-сайт использует индикаторы версий как часть названий своих сборок, таких как XtraEditors8.2.dll. Я предполагаю, что причина в том, что вы хотите иметь возможность иметь несколько версий сборки в одном каталоге. Например, у нас есть около 15 смарт-клиентов, которые распространяются как часть одной оболочки / клиента. Каждый смарт-клиент может иметь свою версию элементов управления DevExpress, и поэтому мы должны иметь возможность иметь XtraEditors7.1.dll и XtraEditors8.2 в одном каталоге.

Я бы сказал, что если у вас есть общие библиотеки, которые являются зависимостями многократно используемых модулей и могут существовать в нескольких версиях 1.0, 1.1, 1.2 и т. Д., То будет правильным аргументом, что номера версий могут быть включены в имя, чтобы избежать конфликтов , Учитывая, что общие члены не живут в GAC.

3 голосов
/ 22 ноября 2008

просто посмотрите на .NET Framework или любой другой продукт Microsoft в этом отношении. помещение номера версии как части названия сборки звучит как плохая идея.

Для этого (и другой информации) есть место в разделе метаданных сборки. (AssemblyInfo.cs)

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

3 голосов
/ 22 ноября 2008

Я не знаю ничего авторитетного, но мне кажется, что использование непротиворечивого имени упростит все от процесса установки скриптов до документации. Учитывая, что можно сохранить версию в виде метаданных в файле, я не знаю, зачем она понадобится в имени файла. Зачем настраивать себя на необходимость учета файлов с разными именами?

1 голос
/ 24 ноября 2008

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

.NET Framework обрабатывает зависимости, совершенно отличающиеся от традиционных DLL-файлов C / C ++, в GAC можно иметь несколько версий библиотеки, главным образом потому, что GAC представляет собой «поддельную» папку, которая связывает к другим файлам в файловой системе, в дополнение к возможности иметь сборки, включенные в ваш исполняемый файл установки (развертывание в той же папке и т. д.).

0 голосов
/ 26 апреля 2011

Microsoft использовала суффикс 32 для обозначения 32-битных версий DLL, чтобы эти DLL могли сосуществовать с существующими 16-битными файлами DLL.

0 голосов
/ 22 ноября 2008

Поскольку версия может быть установлена ​​как свойство, разве это не является избыточным?

Я бы также сказал, что у MS нет стандарта, если быстро взглянуть на их имена DLL: user32.dll, tcpmon.dll, winsock.dll и т. Д.

0 голосов
/ 22 ноября 2008

Информация о версии может содержаться в файле assemblyInfo, а затем запрашиваться с помощью отражения и т. Д.

Некоторые поставщики включают номер версии в название, чтобы было проще увидеть, что это такое. Имена Microsoft dll не содержат номер версии в директории framework.

...