问题
I'm starting to use WiX in order to do automated builds to create msi's of my c# projects and am experiencing the error "Undefined preprocessor variable '$(var.MyProject.TargetDir)'"
I am using the latest WiX v3.0.5419. Inside my wxs file I am trying to use pre-processor variables that are listed on this webpage (http://blogs.msdn.com/jrock/archive/2008/01/29/complete-list-of-candle-preprocessor-variables.aspx)
<Component Id="MyId" Guid="MyGuid">
<File Id="MyId" Name="MyName" KeyPath="yes"
Source="$(var.MyProject.TargetDir)\MyName.dll" />
</Component>
I have added the reference for MyProject to the .wixproj and if I open it up in Notepad I can see the reference.
<ItemGroup>
<ProjectReference Include="..\MyProject.csproj">
<Name>MyProject</Name>
<Project>{guid}</Project>
<Private>True</Private>
</ProjectReference>
</ItemGroup>
This is my nant build script that I use to create the msi. Maybe it's because the .wixproj knows about the project reference which isn't used in the build?
<exec basedir="${tools.wix}" managed="true" program="candle.exe">
<arg line='-out "${tools.wix.objfile}"' />
<arg value="../MySetup.wxs" />
</exec>
Can anyone enlighten me on this please?
回答1:
As you already remarked, your nant build script is not using the wixproj file at all.
You are mixing two different ways to build a wix setup here:
You can use the
candle.exeandlight.execommand line tools directly. This ignores the.wixprojfile. This is what you are doing in your nant build script. To pass values for preprocessor variables like$(var.MyProject.TargetDir), use options like-dMyProject.TargetDir=c:\foo.You can author a .wixproj file with votive (the visual studio add-on for wix). Like all visual studio project files, a wixproj file is actually a msbuild file which can be build with
msbuild.exe. Variables like$(var.MyProject.TargetDir)are automatically set by the msbuild tasks for building wix setups if the correct project reference exists.
I recommend you build the wixproj file with the <msbuild> nant task. This ensures that your nant build does the same as when you build the setup manually from visual studio.
来源:https://stackoverflow.com/questions/2063630/wix-undefined-preprocessor-variable