Установщик WIX: убедитесь, что при сборке используются последовательные номера версий

Я пытаюсь автоматизировать свои сборки установщика Wix с помощью моих сборок Visual Studio. Я получаю версию приложения приложения через это в моем installer.wicproj:

    <Target Name = "BeforeBuild">
        <!-- Get Assembly Version -->
        <!-- Update built assembly below-->
        <GetAssemblyIdentity AssemblyFiles = "..\DavesDonutsInstallerTest\bin\Debug\DavesDonuts.exe">
            <Output TaskParameter = "Assemblies" ItemName = "AssemblyVersion"/>
        </GetAssemblyIdentity>

        <PropertyGroup>
            <DefineConstants>BuildVersion=%(AssemblyVersion.Version)</DefineConstants>
        </PropertyGroup>        
        
    </Target>

Затем я использую это в своем основном Product.wxs для заполнения номера версии:

    <Product Id = "*" 
                Name = "!(loc.ProductName)"
                Language = "1033" 
                Version = "$(var.BuildVersion)"
                Manufacturer = "!(loc.Developer)" 
                UpgradeCode = "{40CB43C5-1910-4B9D-ABD2-92F620E7125C}">

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

Я не хочу каждый раз вручную обновлять Product ID, поэтому auto-gen.

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

Я бы предположил, что это будет сделано в функции install.wixproj BeforeBuild, но понятия не имею, как это реализовать. Я бы предположил, что это работает таким образом. При успешной сборке версия сборки записывается в текстовый файл в папке проекта WixINstaller (через AfterBuild??). Затем при следующем BeforeBuild это извлекается и сравнивается с «настоящей» версией приложения, и если они совпадают, сборка останавливается и выдается ошибка.

Пункты Брауни: некоторая процедура, чтобы выяснить, является ли это более низкой версией сборки, чтобы контролировать ошибку при установке версии приложения.

Wix кажется мощным, но немного сбивает с толку.

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

Ответы 1

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

Я управлял этим полностью за пределами WIX с помощью события Pre-Build Build в VS. Просто поместите этот пакетный сценарий в поле Pre-Build. Также удалось дополнительно проверить более низкие номера версий, чем в прошлом. Он также публикует ошибки и предупреждения на панели ошибок VS.

Или

::Error Thrown by Build Script
@echo off
setlocal ENABLEDELAYEDEXPANSION

:: SETTINGS VARS
:: exceptionOnMatchingVersion can be Warning, Error or None. Be careful of trailing spaces
set exceptionOnMatchingVersion=Error

echo ==========================
echo PRE-BUILD EVENTS
echo ==========================
echo Build Type: $(ConfigurationName)
echo Project: $(ProjectName)

echo.
echo Checking Build Assembly Version for Wix Installer Build

:: PROCESS VARS
set /p lastversion=<lastbuildversion.txt

set version=0.0.0.0
FOR /F delims^=^"^ tokens^=2 %%i in ('findstr /b /c:"[assembly: AssemblyVersion(" $(ProjectDir)\Properties\AssemblyInfo.cs') do (
  set version=%%i
)

set concatVersion=0.0.0
    set /a presentMajor=0
    set /a presentMinor=0
    set /a presentPatch=0
    set /a lastMajor=0
    set /a lastMinor=0
    set /a lastPatch=0
    
for /F "tokens=1,2,3 delims=." %%a in ("%version%") do (
    set concatVersion=%%a.%%b.%%c
    set /a presentMajor=%%a
    set /a presentMinor=%%b
    set /a presentPatch=%%c
    )
    
for /F "tokens=1,2,3 delims=." %%a in ("%lastversion%") do (
    set /a lastMajor=%%a
    set /a lastMinor=%%b
    set /a lastPatch=%%c
    )

echo Build Full Assembly Version: %version%
echo Concatinated Assembly Version: %concatVersion%
echo Last Concatinated Assembly Version: %lastversion%

set lowerVersion=False

If "$(ConfigurationName)"= = "Release" (
    If "%lastversion%" == "%concatVersion%" (
        If NOT %exceptionOnMatchingVersion% == None (
            echo.
            echo ======================================================================================================================================================
            echo = ALERT: The last Assembly Version is the same as this Build's Assembly Version. This causes issues with the installer. Please ammend the version number.
            echo = *** YOU ARE ADVISED NOT TO DEPLOY THIS VERSION ***
            echo ======================================================================================================================================================
            echo.
            If %exceptionOnMatchingVersion% == Warning (
                echo Warning: The last Assembly Version is the same as this Build's Assembly Version. This causes issues with the installer. Please ammend the version number.
                )
            If %exceptionOnMatchingVersion% == Error (
                echo Error: The last Assembly Version is the same as this Build's Assembly Version. This causes issues with the installer. Please ammend the version number. BUILD STOPPED.
                exit 1
                )
        )
        
    ) else (
    
        if %presentPatch% LSS %lastPatch% (
            if %presentMinor% LEQ %lastMinor% (
             set "lowerVersion=True"
            )
        ) else (
        
            if %presentMinor% LSS %lastMinor% (
                if %presentMajor% LEQ %lastMajor% (
                 set "lowerVersion=True"
                )
            ) else (
            
                if %presentMajor% LSS %lastMajor% (
                set "lowerVersion=True"
                )
            )           
        )
        
        if "!lowerVersion!"= = "True" (
            echo.
            echo ======================================================================================================================================================
            echo = FATAL EXCEPTION: You are trying to build the assembly to a lower version numer. Please check your numbering. BUILD STOPPED..
            echo = *** YOU ARE ADVISED NOT TO DEPLOY THIS VERSION ***
            echo ======================================================================================================================================================
            echo.
            echo Error: You are trying to build the assembly to a lower version numer. Please check your numbering. BUILD STOPPED. This version: %concatVersion%. Last Version: %lastversion%
            exit 1
        ) else (
            echo ======================================================================================================================================================
            echo = VERSION NUMBER VALID: Proceeding to build. \o/
            echo ======================================================================================================================================================
            )
        
    )   
)

:: echo Lower Version: %lowerVersion%

echo %concatVersion%> lastbuildversion.txt

Привет, stigzler, рад узнать, что ты нашел решение этой проблемы! Пожалуйста, примите его как ответ, чтобы изменить его статус на «Отвечено». См. можно я сам отвечу на свой вопрос.., просто напоминание :)

Jiale Xue - MSFT 09.05.2022 03:40

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