Должны ли исполняемые файлы содержать номера версий в своих именах? - PullRequest
3 голосов
/ 14 апреля 2009

Я разрабатываю определенный сервер. До сих пор две версии не могли быть установлены одновременно. Сейчас мы меняем это, и возник вопрос: должен ли номер версии добавляться к компонентам сервера или нет? Сервер содержит 3 exe и 5 dll (некоторые COM, некоторые собственные VC ++). Должны ли все или их имена содержать версию ( Serv71.exe , module71.dll ) или нет?

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

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

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

Редактировать: Я знаком с COM и версией метаданных файла, и согласен с тем, что версионность имени файла является избыточной. Я пытаюсь выяснить, что более важно - постоянные издержки избыточности или редкий выигрыш в обслуживании.

Ответы [ 4 ]

2 голосов
/ 14 апреля 2009

Обычно информация о версии является частью метаданных (расширенная информация о файле) DLL, а не частью имени файла.

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

Как общее руководство - не пытайтесь изобретать новые механизмы. Используйте существующие.

1 голос
/ 14 апреля 2009

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

Для простых двоичных API-интерфейсов DLL добавление номеров версий - это идея, но не та, которую я когда-либо видел хорошо выполненной (и довольно ужасно выполняемой в этих старых 16-битных библиотеках VB времени выполнения!). Есть ли у них четкие API с разделителями или они предоставляют десятки функций? У вас будут проблемы с удалением второстепенных от серьезных изменений, если интерфейсы большие. Как только вы начнете маркировать версии таким образом, вы должны будете быть последовательными. Каждое изменение версии будет означать, что статически связывающие клиенты должны быть перекомпилированы (и, следовательно, версия перемаркирует себя). Потенциальная проблема здесь в том, что вы получаете много 'шумов версий' , скрывающих важные изменения.

Двоичные файлы Windows содержат метаданные версии (структура VERSIONINFO ). Как говорит LeJeune, это хорошо известный маршрут, хотя он и не вызывает автоматических ошибок, когда вы связываете не те вещи. Тем не менее, это тот, который вы можете относительно легко использовать для поддержки любой схемы управления конфигурацией, которая вам нужна.

0 голосов
/ 14 апреля 2009

"Что касается минусов, это усложнит разработку."

Не совсем верно. Это выявляет проблему, с которой вы уже столкнулись - выровняв все выпуски всех компонентов.

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

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

0 голосов
/ 14 апреля 2009

Я бы сказал, что если библиотеки DLL предоставляют разные API в разных версиях, номер версии должен быть добавлен к имени файла. Для исполняемых файлов это не имеет значения. Если исполняемый файл взаимодействует с использованием указанного интерфейса, и это меняется, я бы также использовал номер версии в именах файлов исполняемых файлов.

...