我遇到过几个来源,说明使用包含文件(.wxi)将WiX安装文件拆分为单独的部分(变量,组件等)。对我来说很有意义,所以我采用了< components> .wxs文件中的节点并将它们放在一个单独的文件中,但是当我尝试在Visual Studio 2008中编译项目时,每个< ComponentRef>都会出现错误。在“产品:{...}”一节中说明它是“未解决的符号引用...”。
我尝试使用<?include“文件名”?>在我的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中构建它?编写脚本似乎更简单,但还不是我的问题。
答案 0 :(得分:11)
包含文件应被视为头文件,您实际上只想使用它们来声明需要在多个.wxs
文件之间共享的公共变量等。
我的项目使用~10 .wxs文件和一个.wxi来定义产品代码,升级代码等。
为了更好地了解我正在谈论的内容,请查看SO问题Wix Tricks & Best Practices和WiX Includes vs. Fragments,以及 Wix.chm < / p>
答案 1 :(得分:4)
尝试使用WXS扩展而不是WXI。我打破了我的使用并使用WXS作为扩展,它只是起作用。项目中的所有WXS文件都由wixproj传递给wix编译器。
答案 2 :(得分:0)
发现这个问题搜索我的问题,我想我会添加我的修复,因为有人来自我所在的地方。
如果您正在使用wixproj文件从Visual Studio进行编译,则此项目类型似乎不支持文件链接(添加exising项目...添加为链接)。你最终会得到你项目中的链接,但是当你编译它时会抱怨有未解析的符号。