[wix-users] Use PreProcessor variable in BeforeBuild action

Brian Enderle brianke at gmail.com
Fri Nov 6 07:32:15 PST 2015


Thank you for the detailed explanation.  In conjunction with your other
email, I think I understand the build process enough to realize what I am
trying to do isn't possible.

My intent with all this was to avoid making future developers modify the
.wixproj file to update product version, product name, etc.

What I did find is that MSBuild.Community.Tasks has a //Version element
that reads from a text file and can handle auto-incrementing.  In
conjunction with this I am now able to update the Assembly.cs file
automatically at each build and I only need to manually modify the .wixproj
when I first create the WiX project.

Here is how I accomplished this:


-- MySetup.wixproj --

 <!-- Import the AssemblyInfo task -->
  <Import Project="$(WixTargetsPath)" />
  <PropertyGroup>

<MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath>
  </PropertyGroup>
  <Import
Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />

  <Target Name="BeforeBuild">

    <Version VersionFile="version.txt" RevisionType="Increment">
      <Output TaskParameter="Major" PropertyName="Major" />
      <Output TaskParameter="Minor" PropertyName="Minor" />
      <Output TaskParameter="Build" PropertyName="Build" />
      <Output TaskParameter="Revision" PropertyName="Revision" />
    </Version>

    <!-- Update Utilities Assembly.cs for this product (change GUID for
each new product) -->
    <AssemblyInfo
OutputFile="$(SolutionDir)\MyProject\Properties\AssemblyInfo.cs"
CodeLanguage="CS" AssemblyTitle="My Project" AssemblyProduct="My Project"
AssemblyDescription="My Project" AssemblyConfiguration=""
AssemblyCompany="My Company" AssemblyCopyright="©My Company 2015"
AssemblyTrademark="" AssemblyCulture="" ComVisible="false"
AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)"
Guid="******-44BA-*********" />
  </Target>


Running this the first time creates the version.txt file which I included
in my WiX project and now when I want to release a new version I simply
update the Major/Minor/Build number(s) and the "Increment" auto-increments
the Revision.



Brian

If you can't explain it simply, you don't understand it well enough.  -
Albert Einstein

On Fri, Nov 6, 2015 at 9:30 AM, Phill Hogland <phill.hogland at rimage.com>
wrote:

> The following code that you posted are snippets from a wixproj file, which
> uses the MSBuild syntax, so you cannot use Wix schema elements, like
> WixVariable directly in the MSBuild script.  The WixVariable element is
> interpereted by candle.exe and light.exe/lit.exe, and not by MSBuild.
>
> In your wixproj file do something like this:
>   <PropertyGroup >
>      <!-- MSBuild properties which are the same for all configurations.
>  I find it a good idea to prepend my custom MSBuild properties, to make
> sure that they are unique, so here I use "My...." but it could be an
> abbreviation for the company.  -->
>      <MyProductVersion>BuildVersion2=2.2.2</ MyProductVersion >
>   </PropertyGroup>
>  <!-- Now do each of the standard configuration blocks.-->
>   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86'
> ">
>      <OutputPath>bin\</OutputPath>
>      <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
>      <DefineConstants>Debug;BuildVersion=1.1.1</DefineConstants>
>      <WixVariables>BuildVersion2=2.2.2</WixVariables>
>   </PropertyGroup>
>   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' ==
> 'Release|x86' ">
>      <OutputPath>bin\</OutputPath>
>      <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
>      <DefineConstants>BuildVersion=1.1.1</DefineConstants>
>      <WixVariables>BuildVersion=2.2.2</WixVariables>
>   </PropertyGroup>
> <!-- After all of the configuration PropertyGroups, set MSBuild properties
> and Wix tool commands-->
>   <PropertyGroup >
>     <CompilerAdditionalOptions>
>       $(CompilerAdditionalOptions)
>        <!-- The above line allows you to define CompilerAddionalOptions in
> other .targets files and use the MSBuild Import command prior to this point
> in this file. -->
>       <!-- In the following line $(MyProductVersion) is an MSBuild
> Property that is above this pointin this file, or was MSBuild Imported
> earlier in this file.   The -d tells the wix pre-processor (candle.exe) to
> create the pre-processor variable MyProductVersionPreVar, which you can
> then use in your wxs files using the syntax $(var.MyProductVersionPreVar)
> -->
>       -d MyProductVersionPreVar ="$( MyProductVersion)"
>     </CompilerAdditionalOptions>
>     <LinkerAdditionalOptions>
>       $(LinkerAdditionalOptions)
>       -nologo
>       -b
> ImgServer="\\halo\CDSet\Build_Input_Area\9.1_DIST_RSS\Model\programfiles\Rimage\Imaging
> Server\\"
>       -b
> STATIC_ImgServer="\\halo\CDSet\Build_Input_Area\9.1_DIST_RSS\Model\STATIC\programfiles\Rimage\Imaging
> Server\\"
>     </LinkerAdditionalOptions>  </PropertyGroup>
>
> So once you create that pre-processor variable in your .wixproj file, you
> then use it in a wxs file as a pre-processor variable, (AND do not define a
> variable of the same name in a wxi file, as it is already defined by the -d
> command.)
>
> For an MSI package .wxs project you can use it in the Product element like
> this
>  <Product Version="$(var.MyroductVersion)" ............. />
>
> <!--  IF you are importing a WIXLIB which also needs this information,
> then you would create a WixVariable to pass down to the WIXLIB -->
> <WixVariable Id="MyAppRegKey"
> Value="SOFTWARE\Company\App_$(var.MyProductVersion)"
> </Product>
>
> In the WIXLIB you might have something like this that uses the WixVariable
>     <Component ..........">
>       <RegistryValue Root="HKMU" Key="!(wix.MyAppRegKey)" Name="something"
> Value="some data" Type="string" KeyPath="yes" />
>     </Component>
>
> For a Bundle element  if the above wixproj was for a bootstrapper project
>
>  <Bundle Version="$(var.MyroductVersion)" ....>
>
>   <!-- IF you want to pass this value to a bootstrapper application then
> use a Burn Engine Variable.  In the case of the product version it is
> already passed into the BA as ProductVersion, but this example is so that
> you can do this for some other purpose which is not obvious.  -->
>   <Variable Name="MyProductVersionEngVar" Type='string'
> Value="$(var.MyroductVersion)" Persisted='yes' bal:Overridable='yes' />
>
>   <!-- IF you also need to pass this info down to a WIXLIB, then use a
> WixVariable as described above. -->
>
> </Bundle>
>
>
>
>
> -----Original Message-----
> From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On Behalf
> Of Brian Enderle
> Sent: Friday, November 06, 2015 6:59 AM
> To: WiX Users <wix-users at lists.wixtoolset.org>
> Subject: [wix-users] Use PreProcessor variable in BeforeBuild action
>
> I have the following defined in my wixproj file:
>
>   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86'
> ">
>      <OutputPath>bin\</OutputPath>
>      <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
>      <DefineConstants>Debug;BuildVersion=1.1.1</DefineConstants>
>      <WixVariables>BuildVersion2=2.2.2</WixVariables>
>   </PropertyGroup>
>
>   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' ==
> 'Release|x86' ">
>      <OutputPath>bin\</OutputPath>
>      <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
>      <DefineConstants>BuildVersion=1.1.1</DefineConstants>
>      <WixVariables>BuildVersion=2.2.2</WixVariables>
>   </PropertyGroup>
>
>
> Is there a way to use either 'BuildVersion' or 'BuildVersion2' in a
> BeforeBuild action?  Something like:
>
>    <AssemblyInfo AssemblyVersion="$(var.BuildVersion)" />
>
> or
>
>    <AssemblyInfo AssemblyVersion="$(var.BuildVersion2)" />
>
>
> TIA
>
> Brian
>
> If you can't explain it simply, you don't understand it well enough.  -
> Albert Einstein
>
> ____________________________________________________________________
> WiX Toolset Users Mailing List provided by FireGiant
> http://www.firegiant.com/
>
> ____________________________________________________________________
> WiX Toolset Users Mailing List provided by FireGiant
> http://www.firegiant.com/
>



More information about the wix-users mailing list