50

我开始使用 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-变量.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>

任何人都可以启发我吗?

4

1 回答 1

55

正如您已经说过的,您的 nant 构建脚本根本没有使用该wixproj文件。

您在这里混合了两种不同的方式来构建 wix 设置:

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

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

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.

于 2010-01-14T12:21:19.903 回答