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

Posted

技术标签:

【中文标题】尽管 .wxi 文件中有变量,但 WiX“未定义的预处理器变量”【英文标题】:WiX "Undefined Preprocessor Variable" despite variable in .wxi file 【发布时间】:2015-12-03 21:44:20 【问题描述】:

我在 Visual Studio 中有一个 WiX 项目,其中包含两个文件:Product.wxs 和 config.wxi。

当我尝试构建此项目时,我收到以下错误:“未定义的预处理器变量 '$(var.ProductName)'。”

我在这里做错了什么,显然无法识别包含文件?

config.wxi

<?xml version="1.0" encoding="utf-8"?>
<Include>
  <?Define Manufacturer = "My Company" ?>
  <?Define ProductName = "My Product" ?>
  <?Define Version = "1.0.0.0" ?>
  <?Define BuildType = "Development" ?>
  <?Define BuildTypeShort = "Dev" ?>
</Include>

产品.wxs:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <?include config.wxi ?>
  <Product Id="*" Name="$(var.ProductName)" Language="1033" Version="$(var.Version)" Manufacturer="$(var.Manufacturer)" UpgradeCode="6e7efd44-0149-416b-871d-418ba6365e1b">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />
        <Feature Id="ProductFeature" Title="MySetup" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>
    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
        <Directory Id="ManufacturerFolder" Name="$(var.Manufacturer)">
          <Directory Id="INSTALLFOLDER" Name="$(var.ProductName)" />
        </Directory>
            </Directory>
        </Directory>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <Component Id="ProductComponent">
        <File Source="$(var.SomeProjectA.TargetPath)"/>
        <File Source="$(var.SomeProjectB.TargetPath)"/>
            </Component>
    </ComponentGroup>
    </Fragment>
</Wix>

【问题讨论】:

【参考方案1】:

使用“定义”而不是“定义”。

在这里:

   <?xml version="1.0" encoding="utf-8"?>
   <Include>
      <?define Manufacturer = "My Company" ?>
      <?define ProductName = "My Product" ?>
      <?define Version = "1.0.0.0" ?>
      <?define BuildType = "Development" ?>
      <?define BuildTypeShort = "Dev" ?>
    </Include>

【讨论】:

以上是关于尽管 .wxi 文件中有变量,但 WiX“未定义的预处理器变量”的主要内容,如果未能解决你的问题,请参考以下文章

Wix、Heat 和 Wxi 文件

在 Visual Studio WiX 项目中使用 WXI 文件

WiX 未定义的预处理器变量

WIX 如何删除 xmlns="" 标签

使用啥数据结构来快速存储文本文件,它有变量号。行数和变量号。在 C++ 中快速添加子元素?

未定义的偏移量错误,但偏移量不是未定义的