WiX 未定义的预处理器变量

Posted

技术标签:

【中文标题】WiX 未定义的预处理器变量【英文标题】:WiX undefined preprocessor variable 【发布时间】:2011-01-05 00:55:21 【问题描述】:

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

我已将 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】:

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

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

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

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

我建议您使用 &lt;msbuild&gt; nant task 构建 wixproj 文件。这可确保您的 nant 构建与您从 Visual Studio 手动构建设置时一样。

【讨论】:

非常感谢。我刚刚发现 wixproj 是一个 msbuild 文件,实际上我已经通过构建我的解决方案正确地构建了它! 快速提醒——指定选项的正确方法是 -dMyProject.TargetDir。领先的变种。是错误的。 geekswithblogs.net/Howard/archive/2009/01/20/wix-variables.aspx 每次使用 WIX 时,我都会忘记如何在命令行上声明预处理器变量。谢谢大佬! 我正在尝试按照 these 说明构建一个简单的安装程序以开始使用 WiX。结果,我收到“未定义的 preproc var $(var.MyApplication.TargetPath)”错误。我尝试添加构建道具var.myApplication.TargetPath=D:\Apps;,但错误仍然存​​在。你能帮我吗?我在答案中遗漏了一些东西...... var 似乎是正确的(参见 this 列表)。 @Matt 您需要添加对您要安装的项目的引用。

以上是关于WiX 未定义的预处理器变量的主要内容,如果未能解决你的问题,请参考以下文章

尽管 .wxi 文件中有变量,但 WiX“未定义的预处理器变量”

Wix错误未定义的预处理器变量(错误CNDL0150)

WiX - 未定义的预处理器变量'$(var.SetupProject1.TargetDir)'

引用 SSDT 项目的 WiX 项目无法在 TFSBuild 中构建 - 未定义的预处理器变量“$(var.DatabaseProject.TargetDir)”

WiX 引导程序项目参考变量

CSS 预处理器,可以在 @media 查询中定义变量