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

时间:2009-04-29 19:46:37

标签: visual-studio-2008 wix

我遇到过几个来源,说明使用包含文件(.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中构建它?编写脚本似乎更简单,但还不是我的问题。

3 个答案:

答案 0 :(得分:11)

包含文件应被视为头文件,您实际上只想使用它们来声明需要在多个.wxs文件之间共享的公共变量等。

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

为了更好地了解我正在谈论的内容,请查看SO问题Wix Tricks & Best PracticesWiX Includes vs. Fragments,以及 Wix.chm < / p>

答案 1 :(得分:4)

尝试使用WXS扩展而不是WXI。我打破了我的使用并使用WXS作为扩展,它只是起作用。项目中的所有WXS文件都由wixproj传递给wix编译器。

答案 2 :(得分:0)

发现这个问题搜索我的问题,我想我会添加我的修复,因为有人来自我所在的地方。

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