WiX未定义的预处理器变量

Dav*_*vid 44 build-automation preprocessor wix wix3 votive

我开始使用WiX进行自动构建以创建我的c#项目的msi,并且遇到错误"Undefined preprocessor variable'$(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>
Run Code Online (Sandbox Code Playgroud)

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

<ItemGroup>
  <ProjectReference Include="..\MyProject.csproj">
    <Name>MyProject</Name>
    <Project>{guid}</Project>
    <Private>True</Private>
  </ProjectReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

<exec basedir="${tools.wix}" managed="true" program="candle.exe">
  <arg line='-out "${tools.wix.objfile}"' />
  <arg value="../MySetup.wxs" />
</exec>
Run Code Online (Sandbox Code Playgroud)

请问有人能开导我吗?

Wim*_*nen 49

正如您已经注意到的那样,您的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.$(var.MyProject.TargetDir)如果存在正确的项目引用,则由msbuild任务自动设置变量,以构建wix设置.

我建议你用<msbuild> nant任务构建wixproj文件.这可确保您的nant构建与从Visual Studio手动构建设置时的构建方式相同.

  • 我试图通过遵循**[这些](http://wixtoolset.org/documentation/manual/v3/votive/authoring_first_votive_project.html)**说明来构建一个简单的安装程序以开始使用WiX.结果,我得到"Undefined preproc var` $(var.MyApplication.TargetPath)`"错误.我试图添加构建道具`var.myApplication.TargetPath = D:\ Apps;`但错误仍然存​​在.你能帮我吗?我在答案中遗漏了一些东西...... var似乎是正确的(参见**[this](https://blogs.msdn.microsoft.com/jrock/2008/01/29/complete-list-of- candle-preprocessor-variables /)**list). (2认同)
  • @Matt您需要添加对您要安装的项目的引用。 (2认同)