Using Project References and Variables
The WiX project supports adding project references to other projects such as VB and C#. This ensures that build order dependencies are defined correctly within the solution. In addition, it generates a set of WiX preprocessor variables that can be referenced in WiX source files and preprocessor definitions which are passed to the compiler at build time.
To add a project reference to a WiX project:
- Right-click on the References node of the project in the Solution Explorer and choose Add Reference....
- In the Add Reference dialog, click on the Projects tab.
- Select the desired project(s) and click the Add button, and then press OK to dismiss the dialog.
Supported Project Reference Variables
Once a project reference is added, a list of project variables becomes avaliable to be referenced in the WiX source code. Project reference variables are useful when you do not want to have hard-coded values. For example, the $(var.MyProject.ProjectName) variable will query the correct project name at build time even if I change the name of the referenced project after the reference is added.
The following demonstrates how to use project reference variables in WiX source code:
<File Id="MyExecutable" Name="$(var.MyProject.TargetFileName)" Source="$(var.MyProject.TargetPath)" DiskId="1" />
The WiX project supports the following project reference variables:
Variable name | Example usage | Example value |
var.ProjectName.Configuration | $(var.MyProject.Configuration) | Debug or Release |
var.ProjectName.FullConfiguration | $(var.MyProject.FullConfiguration) | Debug|AnyCPU |
var.ProjectName.Platform | $(var.MyProject.Platform) | AnyCPU, Win32, x64 or ia64 |
var.ProjectName.ProjectDir | $(var.MyProject.ProjectDir) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MyProject\ |
var.ProjectName.ProjectExt | $(var.MyProject.ProjectExt) | .csproj |
var.ProjectName.ProjectFileName | $(var.MyProject.ProjectFileName) | MyProject.csproj |
var.ProjectName.ProjectName | $(var.MyProject.ProjectName) | MyProject |
var.ProjectName.ProjectPath | $(var.MyProject.ProjectPath) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MyProject\MyApp.csproj |
var.ProjectName.TargetDir | $(var.MyProject.TargetDir) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MyProject\bin\Debug\ |
var.ProjectName.TargetExt | $(var.MyProject.TargetExt) | .exe |
var.ProjectName.TargetFileName | $(var.MyProject.TargetFileName) | MyProject.exe |
var.ProjectName.TargetName | $(var.MyProject.TargetName) | MyProject |
var.ProjectName.TargetPath | $(var.MyProject.TargetPath) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MyProject\bin\Debug\MyProject.exe |
var.ProjectName.Culture.TargetPath | $(var.MyProject.en-US.TargetPath) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MyProject\bin\Debug\en-US\MyProject.msm |
var.SolutionDir | $(var.SolutionDir) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MySolution\ |
var.SolutionExt | $(var.SolutionExt) | .sln |
var.SolutionFileName | $(var.SolutionFileName) | MySolution.sln |
var.SolutionName | $(var.SolutionName) | MySolution |
var.SolutionPath | $(var.SolutionPath) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MySolution\MySolution.sln |
Note: var.ProjectName.Culture.TargetPath is only available for projects that have multiple localized outputs (e.g. MSMs).