Я пытаюсь автоматизировать свои сборки установщика 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 кажется мощным, но немного сбивает с толку.
Я управлял этим полностью за пределами 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, рад узнать, что ты нашел решение этой проблемы! Пожалуйста, примите его как ответ, чтобы изменить его статус на «Отвечено». См. можно я сам отвечу на свой вопрос.., просто напоминание :)