2010-06-21 8 views
3

J'utilise l'outil WIX pour créer un fichier d'installation pour notre projet.Numéro de build d'incrémentation automatique en utilisant WIX

Je veux avoir le numéro de build dynamique (incrémental). Alors quelqu'un peut-il me guider s'il vous plaît?

Veuillez ne pas fournir de solution comme 1.0.0. * Car cela donne un nombre dynamique à la fin. Je veux que ce soit incrémental comme 1.0.0.1, 1.0.0.2, 1.0.0.3, .....

+0

Utilisez-vous déjà un outil d'intégration continue? Si c'est le cas, ça va être plus facile si vous nous dites lequel; Si ce n'est pas le cas, vous voudrez peut-être examiner cela en premier. TeamCity est assez efficace pour gérer les numéros de build. – pdr

Répondre

1

Vous ne pouvez pas le faire avec WiX nativement.

Cependant, vous pouvez définir votre version en tant que variable. par exemple:

<Product Id="*" 
     UpgradeCode="$(var.Property_UpgradeCode)" 
     Name="!(loc.ApplicationName)" 
     Language="!(loc.Property_ProductLanguage)" 
     Version="$(var.version)" 
     Manufacturer="!(loc.ManufacturerName)" > 

Ensuite, vous pouvez passer le numéro de version sur la ligne de commande. Voici un exemple en utilisant Nant

<candle 
      out="${dir.obj}\" 
      rebuild="true" 
      extensions="WixUIExtension;WixNetFxExtension"> 
      <defines> 
       <define name="ProcessorArchitecture" value="${release.platform}" /> 
       <define name="SourceDir" value="${dir.source}" /> 
       <define name="version" value="${version}" /> 
       <define name="releasetype" value="${release.type}" /> 
       <define name="Language" value="${language}" /> 
      </defines> 

      <sources> 
       <include name="*.wxs" /> 
      </sources> 
     </candle> 

Ensuite, vous gérez simplement le numéro de version de la même manière que vous faites pour votre application :)

1

Vous pouvez utiliser la msbuild community tasks version classe par exemple

<PropertyGroup>

<MinorIncrement Condition=" '$(ReleaseType)' == 'Internal' ">None</MinorIncrement> 
    <MinorIncrement Condition=" '$(MinorIncrement)' == '' ">Increment</MinorIncrement> 
    <BuildIncrement>Increment</BuildIncrement> 
    <BuildIncrement Condition=" '$(MinorIncrement)' == 'Increment' ">Reset</BuildIncrement> 
</PropertyGroup> 

<Target Name="BumpVersion"> 
    <Version VersionFile="version.txt" MinorType="$(MinorIncrement)" BuildType="$(BuildIncrement)"> 
     <Output TaskParameter="Major" PropertyName="Major"/> 
     <Output TaskParameter="Minor" PropertyName="Minor"/> 
     <Output TaskParameter="Build" PropertyName="Build"/> 
     <Output TaskParameter="Revision" PropertyName="Revision"/> 
    </Version> 

    <AssemblyInfo CodeLanguage="CS" OutputFile="VersionInfo.cs" AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)" AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)"/> 
    <Message Text="Version: $(Major).$(Minor).$(Build).$(Revision)"/> 
</Target> 

Dans la section supérieure, je définis des valeurs pour les types de version. Malheureusement, ceux-ci semblent seulement être documentés dans le code.

CruisControl.Net définit le ReleaseType de manière externe.

Si nous avons un ReleaseType de 'Internal' alors l'incrément mineur n'est pas fait mais le numéro de build est dépassé et si ce n'est pas le cas, nous incrémentons le numéro mineur et réinitialisons le numéro de build. L'élément Version lira la version à partir de version.txt, sous la forme "1.0.1.3", y ajoutera des choses, puis la lira dans certaines variables, c'est ce que le bit de sortie est à propos de (je pense!) Pour l'utilisation dans le bit qui modifie les informations d'assemblage