在 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 安装文件拆分为单独的部分(变量、组件等)。对我来说非常有意义,所以我将
我尝试在我的 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 项目