Как я могу установить версию установщика WiX на текущую версию сборки?

StackOverflow https://stackoverflow.com/questions/626033

  •  05-07-2019
  •  | 
  •  

Вопрос

Я написал приложение и его установщик WiX и поместил его под контроль версий с помощью subversion.Когда установщик WiX будет собран, я хочу, чтобы его номером версии была текущая версия сборки приложения.Как мне этого добиться?Я использовал c # для кодирования приложения.

Н.Б.Я использую ccnet для создания этого проекта

Это было полезно?

Решение

Вы могли бы использовать Product/@Version="!(привязка.FileVersion.FileId)" (заменить FileId с помощью Id файла, из которого вы хотели бы получить номер версии) и light.exe заполнит значение версией файла, на который ссылается FileId.

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

Я сделал это в одном из своих проектов, написав расширение препроцессора для чтения версии файла из моего исполняемого файла.Итак, файл WiX выглядит примерно так:

<?define ProductName="$(fileVersion.ProductName($(var.MyApp.TargetPath)))" ?>
<?define CompanyName="$(fileVersion.CompanyName($(var.MyApp.TargetPath)))" ?>
<?define ProductVersion="$(fileVersion.ProductVersion($(var.MyApp.TargetPath)))" ?>
<Product 
    Id="<product ID>" 
    Name="$(var.ProductName)" 
    Version="$(var.ProductVersion)" 
    Manufacturer="$(var.CompanyName)" 
    Language="1033" 
    UpgradeCode="<upgrade code>">

Я разместил код для in на CodePlex: http://wixfileversionext.codeplex.com/

На случай, если кто-то ищет реальный пример XML, это работает с .СЕТЕВЫЕ сборки (и вам не нужно указывать атрибуты Assembly или keyPath).Я устранил несвязанный код с [...] заполнителями:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product [...] Version="!(bind.fileVersion.MyDLL)">
        [...]
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder" Name="PFiles">
                <Directory Id="INSTALLDIR" Name="MyDLLInstallLocation">
                    <Component Id="MainLib" Guid="[...]">
                        <File Id="MyDLL" Name="MyDll.dll" Source="MyDll.dll" />
                        [...]
                    </Component>
                    [...]
                </Directory>
            </Directory>
        </Directory>
    </Product>
</Wix>

Вот очень простой способ привести версию вашего пакета Bootstrapper в соответствие с вашей версией MyApp Assembly с помощью BeforeBuild Target и DefineConstants.

Комплект.wxs:

<Bundle Name="$(var.ProductName) Bootstrapper v$(var.BuildVersion)"
     Version="$(var.BuildVersion)"

Загрузчик.wixproj:

<Target Name="BeforeBuild">
  <GetAssemblyIdentity AssemblyFiles="..\MyApp\bin\$(Configuration)\MyApp.exe">
    <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
  </GetAssemblyIdentity>
  <PropertyGroup>
    <DefineConstants>BuildVersion=%(AssemblyVersion.Version)</DefineConstants>
  </PropertyGroup>
</Target>

Это выглядит достаточно близко к тому, чего вы пытаетесь достичь.Посмотрите, что такое эквивалент в круиз-контроле.

http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/

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

Например, если ваша система CI определяет переменные AppVersion и BuildNumber, и передает их вашим сценариям MSBuild, ваш wixproj может создать соответствующий Version свойство, которое он пересылает в Wix следующим образом:

<PropertyGroup>
    <Version Condition=" '$(BuildNumber)' == '' ">0.0.1</Version>
    <Version Condition=" '$(BuildNumber)' != '' ">$(AppVersion).$(BuildNumber)</Version>
    <DefineConstants>Version=$(Version)</DefineConstants>
</PropertyGroup>

Первое определение Version предоставляет значение по умолчанию для случаев, когда вы строите локально.Чем бы это ни закончилось, становится Version переменная в Wix.Используйте его в файле wsx, подобном этому:

<Product Version="$(var.Version)" ...>
    <Package Description="$(var.ProductName) $(var.Version): $(var.ProductDescription)" ... />

Мне нравится включать версию в описание, чтобы ее было легко найти в Проводнике Windows (в виде столбца в подробном представлении или на странице свойств) независимо от имени файла.

Передача версии в виде переменной дает вам больше контроля, чем чтение ее из файла.Когда вы читаете из файла, вы получаете все 4 части программной версии.Однако, Версия продукта предназначен только для использования первых 3 частей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top