Votive project platform configurations

There are some problems using older .wixproj files with newer builds of Votive. When accessing project properties you may receive the error message:

An error occurred trying to load the page.
Value does not fall within the expected range.

Update: As another symptom of the same issue, you may also experience problems with source control check-out with any projects in the solution.

The breaking changes were introduced in WiX builds 3.0.4109 - 3.0.4220, so a .wixproj created with a build <4109 will have problems when used with a build >=4220. I'll explain the changes here and show you how to update older project files to work with newer WiX builds.

The changes are all about the default and available platform configurations of WiX projects. Previously, WiX projects always had a platform of "Any CPU", and there was no way to change it. But actually MSI packages are somewhat platform-specific: a package is marked as either 32bit or 64bit, and cannot be both. While a 32bit MSI can install on a 64bit OS, it's a bit like a 32bit EXE running on WoW in that it can't easily interact with any of the 64bit parts of the system.

The WiX command-line toolset has long enabled building both 32bit and 64bit MSIs, and more developers are starting to build 64bit packages, so we thought it made a lot of sense to expose that capability in the natural Visual Studio representation: project platforms. With the latest builds, a new WiX project has its configuration set to "x86" by default, and you can use the VS Configuration Manager to add an additional "x64" platform if you need it. (IA64 support is not yet implemented... is there any demand?) Also "Any CPU" is no longer a valid platform for WiX projects -- it was only there because Votive builds on a VS project framework was originally designed for compiling .NET languages.

If you have WiX projects that were created with an older WiX build and you want to continue to use them with a newer build without recreating the projects, use the following steps:

  1. Install the new build of WiX.

  2. In VS, open the solution that includes one or more WiX projects.

  3. For each WiX project node in the solution explorer, right-click and Unload Project, then right-click again and Edit the .wixproj.

  4. Change the conditional expression on each configuration PropertyGroup to include an "x86" platform:

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">

    ...

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">

  5. Right-click on the project node and Reload the project.

  6. From the Build menu, open the Configuration Manager tool. Ensure that each WiX project is selected to build (if desired) for each solution configuration.