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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wix错误未定义的预处理器变量(错误CNDL0150)相关的知识,希望对你有一定的参考价值。

我正在尝试使用WIX构建我的第一个安装程序。我没有使用visual studio而是使用命令行。我有一个wxs文件,我也为Headers创建了一个.wxi文件,我已经定义了它们当我运行candle.exe“未定义的预处理器变量'$(var.ProjectDir)'”时,我得到以下错误

这是.wxs和.wxi

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="{CB06C559-BCBF-4C85-95F3-FE55F6F50463}" Name="My first msi installer" Language="1033" Version="1.0.0.0" Manufacturer="Wave-axis" UpgradeCode="9be991bb-ceb1-4320-bfc7-56738e32c99a">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <Icon Id="icon.ico" SourceFile="$(var.ProjectDir)icon.ico" />
    <Property Id="WAVEAXIS" Value="icon.ico" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

    <UIRef Id="WixUI_Minimal" />
    <!--used for the UI for the installer-->


    <Feature Id="ProductFeature" Title="My first msi installer" Level="1">
      <!-- This includes all the feature of the installer-->
      <ComponentGroupRef Id="ProductComponents" />
      <ComponentRef Id="ApplicationShortcut" />
      <!--Used for shortcut on the start up menu-->
      <ComponentRef Id="ApplicationShortcutDesktop" />
      <!--used for desktop shortcut-->
    </Feature>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <!--install location of the application-->
        <Directory Id="INSTALLFOLDER" Name="My first msi installer" />
      </Directory>
      <Directory Id="ProgramMenuFolder">
        <!--install location for the startup-->
        <Directory Id="ApplicationProgramsFolder" Name="My first msi installer" />
      </Directory>
      <Directory Id="DesktopFolder" Name="Desktop" />
      <!--install loaction for the desktop-->
    </Directory>
  </Fragment>
</Wix>

.wxi代码

<?xml version="1.0" encoding="utf-8"?>
<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">

  <?define firstapplication.TargetDir ?>
  <?define ProjectDir ?>
  <?define firstapplication_TargetDir ?>
  <?define ProductId=652648517 ?>

</Include>

关于萨格尔

答案

您需要在每个wxs文件中包含您的wxi文件,您希望在<Wix>标记之前使用文件顶部的属性

<?include $(sys.SOURCEFILEDIR)Path	oInstallVars.wxi?>
<Wix xmlns="http://...">
    ...
</Wix>

This page将解释预处理器的一些可用变量,如“SOURCEFILEDIR”。

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

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

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

wix - 错误 CNDL0004:从命令行运行时文件元素包含意外的属性“src”

wix - 错误CNDL0004:从命令行运行时,file元素包含意外的属性“src”

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

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