WiX未定义的预处理器变量

时间:2010-01-14 11:05:43

标签: wix preprocessor build-automation wix3 votive

我开始使用WiX进行自动构建以创建我的c#项目的msi并遇到错误“未定义的预处理器变量'$(var.MyProject.TargetDir)'”

我使用的是最新的WiX v3.0.5419。在我的wxs文件中,我正在尝试使用此网页上列出的预处理器变量(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>

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

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

有人可以开导我吗?

1 个答案:

答案 0 :(得分:48)

正如您已经注意到的那样,您的nant构建脚本根本没有使用wixproj文件。

您正在混合两种不同的方式来构建一个wix设置:

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

  2. 您可以使用votive创建.wixproj文件(wix的visual studio插件)。与所有visual studio项目文件一样,wixproj文件实际上是一个msbuild文件,可以使用msbuild.exe构建。如果存在正确的项目引用,则msbuild任务会自动设置$(var.MyProject.TargetDir)之类的变量来构建wix设置。

  3. 我建议您使用<msbuild> nant task构建wixproj文件。这可以确保您的nant构建与从visual studio手动构建设置时相同。