我遇到过几个来源,说明使用包含文件(.wxi)将WiX安装文件拆分为单独的部分(变量,组件等)。对我来说很有意义,所以我拿了<!> lt; components <!> gt; .wxs文件中的节点并将它们放在一个单独的文件中,但是当我尝试在Visual Studio 2008中编译项目时,每个<!> lt; ComponentRef <!> gt;都会出现错误。在“产品:{...}'<!>”部分中声明它是<!>“未解决的符号'...'的引用。

我尝试过使用<!> lt;?include <!>“;文件名<!>”?<!> gt;在我的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中构建它?编写脚本似乎更简单,但还不是我的问题。

有帮助吗?

解决方案

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

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

为了更好地了解我正在谈论的内容,请查看SO问题 Wix Tricks < !>放大器;最佳实践 WiX包含与片段以及一如既往的文档在 Wix.chm

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top