WIX 错误,文档元素名称“Wix”无效

Mul*_*ulu 2 wix wix3

我有多个由 heat.exe 生成的 wxs 文件。每个文件都有一个根元素 Wix,两个子 Fragment,每个 Fragment 元素分别有一个 DirectoryRef 和 ComponentGroup 元素。样品如下:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="ANEXMCM">
            <Component Id="cmp06C5225B7EE36AAEA9ADB0AF882F1053" Guid="2924A2A0-D7A2-407E-B9B8-B40AAE1204ED">
                <File Id="filABF39DC4BC6ED4474A2C2DB1C1681980" KeyPath="yes" Source="SourceDir\content.txt" />
            </Component>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="ANEXMCM_CID">
            <ComponentRef Id="cmp06C5225B7EE36AAEA9ADB0AF882F1053" />
        </ComponentGroup>
    </Fragment>
</Wix>
Run Code Online (Sandbox Code Playgroud)

我将文件作为 <?include wixfile.wxs?> 包含在主 WIX 文件中。当我尝试构建我的项目时(我在 Visual Studio 和 SharpDevelop 上都尝试过,我什至尝试过命令行),我得到的错误是“文档元素名称‘Wix’无效。Windows Installer XML 包含文件必须使用‘包含'作为文档元素名称。(CNDL0048) - C:\WorkingDir\anexmcmsetup.wxs:2"。我不知道如何修复此错误。我感谢您的即时帮助。谢谢!

Tor*_*ten 5

对于包含的 xws 文件,我有相同的错误消息。我将此文件的构建操作从“编译”更改为“无”,错误消失了。


Mar*_*arl 5

我有一个类似的问题,那是因为我没有正确实现片段......

可以在这里找到片段的一个很好的基本解释......

http://wix.tramontana.co.hu/tutorial/upgrades-and-modularization/fragments

在我的例子中

在我的特定场景中,我将安装程序拆分为两个 wxs 文件。

  1. Product.wxs - 主 xml 文件)
  2. FilesFragment.wxs - 包含我从热获得的所有文件的 xml 文件)。

我出错的地方是我认为我需要在 Product.wxs 中有某种包含引用来引用 FilesFragment.wxs。类似于您在 c++ 项目中的做法。例如,我假设如果我想在主安装中包含一个名为 wixfile.wxs 的附加 wxs 文件,我需要某种

<?include wixfile.wxs?>

这是一个错误的假设。这种关系是在您的项目文件中建立的(以 .wixproj 结尾),凭借它,它知道该文件存在。

然后,在 Product.wxs 文件中,我需要设置一个 Feature,该功能具有一个 ComponentGroupRef,其 ID 引用我 FilesFragment.wxs 文件中的 ComponentGroup ID。

文件内容示例...

产品.wxs文件

 <Feature Id="ProductFeature" Title="Setup MaxCut" Level="1">
  <ComponentGroupRef Id="FilesFragment" />
</Feature>
Run Code Online (Sandbox Code Playgroud)

FilesFragment.wxs 文件

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
    <DirectoryRef Id="APPLICATIONFOLDER">
        <Component Id="xyz" Guid="{abc...}">
            <File ... />
        </Component>
    ...       
    </DirectoryRef>
</Fragment>
...

<Fragment>
    <ComponentGroup Id="FilesFragment">
        <ComponentRef Id="xyz" />
    </ComponentGroup>
</Fragment>
Run Code Online (Sandbox Code Playgroud)

这实现了我所需要的。我认为这也是你想要做的?