Как синхронизировать номер версии установщика с номерами версий установленных сборок?

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

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

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

Любые идеи?

Редактировать:

Чтобы уточнить, я говорю о проекте установки и развертывания Visual Studio.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
24
0
20 532
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это будет зависеть от набора инструментов установщика, который вы используете.

Мы используем TFS Team Build и WiX v3. У меня есть настраиваемая задача сборки, которая увеличивает номер сборки в Team build (например, 5.0.0.X), затем этот номер версии помещается в общее поле AssemblyInfo.cs AssemblyFileVersion. Он также передается MSBuild нашим решениям / проектам как свойство, которое затем передается в WiX и используется для обновления версии установщика.

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

Ответ принят как подходящий

CodeProject имеет сценарий для установки номера версии файла MSI, который можно запустить на предварительно созданном этапе проекта установки. Вы найдете это здесь:

http://www.codeproject.com/KB/install/NewSetupVersion.aspx

Подробнее

Имейте в виду, что с установщиком Windows все немного сложнее. Файлы MSI (как и те, которые вы создаете с помощью проекта установки и развертывания VS) имеют не только номер версии, но и код продукта, который является значением GUID. Этот код продукта используется установщиком Windows для уникальной идентификации вашего продукта, например в Панели управления -> Добавить или удалить программы, где вы можете решить удалить или восстановить продукт.

Однако при изменении номера версии MSI этот код продукта также должен быть изменен в ряде случаев. Технология MSI плохо документирована, но вы можете найти некоторые рекомендации, когда также изменить код продукта на следующей странице MSDN: http://msdn.microsoft.com/en-us/library/aa367850(VS.85).aspx.

В своих проектах я всегда генерирую новый код продукта для каждой новой версии. Сценарий CodeProject также изменит код продукта за вас.

И еще одно: установщик Windows проверяет только первые три позиции номера версии afaik, все, что находится в четвертом месте, будет проигнорировано, т.е. 2.3.0.1234 считается равным 2.3.0.5678. (Версия продукта)

(На CodeProject есть соответствующая статья, которая также может быть вам интересна: http://www.codeproject.com/KB/install/VersionVDProj.aspx)

Мне не приходило в голову, что проблема может сводиться к программному обновлению файла проекта. Это сработает (хотя я уверен, что не буду использовать регулярные выражения для изменения XML). И спасибо за напоминание о коде продукта: VS напоминает вам об этом, но я бы забыл.

Robert Rossney 08.01.2009 23:40
Код продукта
Jake Berger 02.03.2012 22:32

Я использую обходной путь для проектов установки VS2010 (.MSI + setup.exe). Откройте .vdproj в Блокноте и отредактируйте значение назначения ProductVersion (3.2.1 в примере ниже). Сохраните файл и запустите VS2010, дважды щелкнув файл .vdproj.

    "Product"
    {
    "Name" = "8:Microsoft Visual Studio"
    "ProductName" = "..."
...
    "ProductVersion" = "8:3.2.1"
    "Manufacturer" = "..."
...
    }

Какое преимущество это дает по сравнению с простой установкой свойства Version в окне свойств проекта установки? Разве вы в любом случае не редактируете файл установочного проекта?

Simon Tewsi 06.03.2015 00:58

Другие вопросы по теме