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).