.net: Номера версий для DLL против EXE? - PullRequest
7 голосов
/ 26 июня 2011

Недавно я управлял версиями своего продукта (exe) и каждый раз увеличивал номер сборки в файле assemblyinfo.cs.

Прекрасно работает, мой продукт в настоящее время имеет версию 1.5.xx, так что увеличивается по 4 цифры каждыйраз у меня есть успешная сборка.

Теперь у меня есть мои DLL, которые также являются частью моего приложения.

Что бы кто-нибудь посоветовал, как эти версии?Должен ли я делать эти версии так же, как мой exe, то есть 1.5.xx, или я должен создать другой другой номер версии?

Это то, где я сейчас немного запутался.

Когда мой продукт увеличивается вфункциональность я могу поднять 1,5 до 2,0, но где это оставить мои DLL?

Любой совет по версионированию будет с благодарностью

спасибо

Ответы [ 6 ]

2 голосов
/ 26 июня 2011

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

Соглашение, которое я видел хорошо работающим, состоит в том, чтобы использовать первые 3 числа для представления версии продукта (мажорные / минорные и т. Д.), А 4-я часть номера версии представляет версию контроля версий (так что вы точно знаете, какой источник файлы, из которых поступил бинарный файл).

Надеюсь, это поможет,

John

1 голос
/ 26 июня 2011

По-моему, вы должны управлять своими версиями отдельно.

Поскольку 2 приложения (EXE) могут использовать одну и ту же DLL. Какой версией будет DLL?

Версия DLL должна быть независимой от EXE-файла, который ее запускает.

1 голос
/ 26 июня 2011

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

0 голосов
/ 27 июня 2011

Простой ответ - увеличить номера версий по мере внесения изменений. Не синхронизируйте EXE и DLL, потому что для этого нет причин. DLL предназначена для переносимости - теоретически ее может использовать любой EXE-файл. Если у вас уже есть номер версии для библиотеки DLL, используйте его в качестве текущего базового показателя и по мере его изменения увеличивайте номер версии по мере необходимости.

0 голосов
/ 27 июня 2011

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

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

Две основные цели управления версиями - параллельное выполнение и отслеживание.Параллельное (SxS) позволяет нескольким версиям одной и той же DLL работать в одном приложении.Без изменения номера версии сборки это невозможно.Отслеживание - это просто возможность точно определить моментальный снимок кода, который выполняется на компьютере клиента.И то, и другое может быть достигнуто путем изменения версии сборки, но первое может быть достигнуто только путем изменения версии сборки.

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

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

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

Лучшее, что вы можете сделать, это именно то, что вы естьделать, сесть и спланировать свои требования, а затем наметить границы управления версиями (какие компоненты могут быть разделены контрактами).

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

0 голосов
/ 26 июня 2011

Посмотрите с другой стороны - зачем вам нужны номера версий? Например, одним из ответов на этот вопрос может быть информация о том, что развернуто в местоположении некоторых клиентов.

Итак, если у вас есть приложение, развернутое как main exe, и несколько библиотек DLL, и эта библиотека не является частью любого другого приложения, вы можете чувствовать себя в безопасности, даже если вы полностью забудете о версиях DLL.

В противном случае, если библиотеки будут частью нескольких проектов, увеличьте их версию до ЛЮБОЙ схемы, которая кажется вам логичной, например, увеличьте MINOR 1.X.0.0, когда вы добавляете некоторые функции или изменяете что-то довольно большое, увеличиваете MAJOR. если у вас внутри совершенно разные классы, ...

Что касается увеличения MAJOR из-за функциональности, которая, конечно, опять же является личным вкусом, я бы посоветовал там что-то вроде:

  • увеличение значения MINOR при добавлении функциональности и достижении некоторого важного этапа
  • увеличьте значение MAJOR, если вы измените парадигмы пользовательского интерфейса, что говорит о том, что вы сделали какой-то серьезный редизайн или переписывание.

Также: Описание синтаксиса версии?

...