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

Posted

技术标签:

【中文标题】在 Visual Studio WiX 项目中使用 WXI 文件【英文标题】:Using WXI files in Visual Studio WiX Project 【发布时间】:2009-04-29 19:46:36 【问题描述】:

我遇到了几个来源,声明使用包含文件 (.wxi) 将 WiX 安装文件拆分为单独的部分(变量、组件等)。对我来说非常有意义,所以我将 节点从 .wxs 文件中取出并将它们放在单独的文件中,但是当我尝试在 Visual Studio 2008 中编译项目时,每个 都会出现错误说明它是“'Product:...' 部分中对符号 '...' 的未解决引用”。

我尝试在我的 Product.wxs 文件中使用 标记,但这似乎破坏了架构验证。如果这是包含它的方式,它需要去哪里?

我拥有的文件如下。

Product.wxs

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product ...>
    <Package .../>
    <Media .../>
    <Directory Id="TARGETDIR" Name="SourceDir">
    </Directory>
    <Feature Id="MainProgram" Level="1">
      <ComponentRef Id="ProductComponent" />
      <Feature Id="ContextMenu" Level="2">
        <ComponentRef Id="ContextMenuComponent" />
      </Feature>
    </Feature>
  </Product>
</Wix>

Components.wxi

<?xml version="1.0" encoding="utf-8"?>
<Include>
  <Fragment>
    <Component Id="ProductComponent" ...>
      <File .../>
    </Component>
    <Component Id="ContextMenuComponent" ...>
      <RegistryKey .../>
    </Component>
  </Fragment>
</Include>

如何让它在 Visual Studio 中构建?编写构建脚本似乎更简单,但还不是我的问题。

【问题讨论】:

【参考方案1】:

包含文件应该被认为是头文件,你真的只想用它们来声明你需要在多个.wxs文件之间共享的公共变量等。

我的项目使用约 10 个 .wxs 文件和一个用于定义产品代码、升级代码等的 .wxi。

为了更好地了解我在说什么,请查看 SO 问题 Wix Tricks & Best Practices 和 WiX Includes vs. Fragments,以及一如既往地查看 Wix.chm

中的文档

【讨论】:

@sascha 在这里有正确的建议。您在上面的系统中根本不需要包含。这就是蜡烛/光的力量。【参考方案2】:

尝试使用 WXS 扩展而不是 WXI。我已经分解了我的并使用 WXS 作为扩展,它只是工作。项目中的所有 WXS 文件都由 wixproj 传入 wix 编译器。

【讨论】:

@David McEwing 是的,所有的 .wxs 文件都传递给了蜡烛(创建一堆 .wixobjs 的编译器)然后所有的 .wixobjs 都传递给light(“链接”.wixobjs 和 .wixlibs 的链接器)过滤掉您不引用的内容并创建 .MSI/.MSM。【参考方案3】:

发现这个问题正在寻找我的问题,我想我会添加我的修复以防有人来自我所做的地方。

如果您使用 wixproj 文件从 Visual Studio 编译,似乎此项目类型不支持文件链接(添加现有项目...添加为链接)。您最终会得到项目中的链接,但是当您编译它时会抱怨存在未解析的符号。

【讨论】:

以上是关于在 Visual Studio WiX 项目中使用 WXI 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2013 中启用 WiX 项目

如何在 Visual Studio 2015 中启用 WiX 项目

使用 Visual Studio 2008 创建新的 WiX 安装项目时出错

将 Visual Studio 安装项目转换为 WIX

从 Visual Studio 过渡到 Wix 安装程序

在 Visual Studio 2008 中将目录添加到 CAB 项目