WiX未定义的预处理器variables

我开始使用WiX来执行自动构build来创build我的c#项目的msi,并且遇到错误“未定义的预处理器variables”$(var.MyProject.TargetDir)'“

我正在使用最新的WiX v3.0.5419。 在我的wxs文件里,我试图使用这个网页上列出的预处理器variables( 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> 

我已经将MyProject的参考添加到.wixproj,如果我在记事本中打开它,我可以看到参考。

 <ItemGroup> <ProjectReference Include="..\MyProject.csproj"> <Name>MyProject</Name> <Project>{guid}</Project> <Private>True</Private> </ProjectReference> </ItemGroup> 

这是我用来创buildmsi的nant构build脚本。 也许是因为.wixproj知道在构build中没有使用的项目引用?

 <exec basedir="${tools.wix}" managed="true" program="candle.exe"> <arg line='-out "${tools.wix.objfile}"' /> <arg value="../MySetup.wxs" /> </exec> 

任何人都可以启发我呢?

正如你已经说过的,你的nant构build脚本完全不使用wixproj文件。

您在这里混合两种不同的方式来build立wix设置:

  1. 您可以直接使用candle.exelight.exe命令行工具。 这会忽略.wixproj文件。 这就是你在你的nant构build脚本中所做的。 要传递像$(var.MyProject.TargetDir)这样的预处理器variables的值,请使用像-dMyProject.TargetDir=c:\foo这样的选项。

  2. 您可以使用votive编写.wixproj文件(wix的Visual Studio附加组件)。 像所有的Visual Studio项目文件一样,wixproj文件实际上是一个可以用msbuild.exe构build的msbuild文件。 像$(var.MyProject.TargetDir)这样的variables是由msbuild任务自动设置的,如果存在正确的项目引用,那么就会构buildwix设置。

我build议你用<msbuild> nant任务构buildwixproj文件。 这可以确保你的nant构build与从Visual Studio手动构build设置时相同。