WiX 3.8 MSI适用于32位和64位计算机

3
我有Visual Studio 2012,WiX 3.8设置项目和Burn引导程序。如果我针对32位机器,则一切正常。我想为32位和64位分别创建两个带本地化的MSI文件。但是,在配置管理器中找不到64位目标选项。因此,我手动创建了一个x64目标并尝试编译设置项目。但它完全失败了。我无法包含以下文件:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">

    <?include $(var.ProjectDir)\Includes\Variables.wxi ?>

    <Fragment>
        <CustomAction somecustomaction />
        ...
        More custom actions...
        ...
    </Fragment>
</Wix>

我得到的错误是:

错误 33:模式验证失败,出现以下错误,位于第1行,第206列: 命名空间 'http://schemas.microsoft.com/wix/2006/wi' 中的元素 'Wix' 不能包含文本。 可能期望的元素列表为:'Bundle Product Module Patch Fragment PatchCreation'。 somefile.wxs 2 1 Some.Installer Installer_x64\Some.Installer)

当我移除 include 标签时,它就可以编译了。但是我需要在其他文件中使用这样的 include 指令来引用一些变量。我真的不明白问题出在哪里。include 标签在32位系统上运作得很好,那么如果我将其用于64位目标,为什么会报错?这里有什么问题?
创建不同平台的安装程序有什么最佳实践吗?我还使用 Burn 启动器和英语、德语本地化。我已经查阅了类似的 Stack Overflow 问题,但迄今为止没有帮助。
3个回答

2
错误出现在项目文件中。在我的菜单 构建 -> 配置管理器 中,我将活动构建配置设置为 Release|x64。然而,Visual Studio没有自动更改我的项目文件内容为Release|x64

当我手动编辑项目文件时,我将平台更改为x64,但我忘记将配置更改为Release。它处于Debug|x64模式,并且我的Visual Studio安装正在尝试以Release|x64模式进行编译。现在,错误已得到解决,并且当我手动将项目文件编辑为Release|x64时,我的设置正在编译。

然而,我仍然不理解为什么candle.exe会给我这个错误,因为据我所知这是Visual Studio 2012的问题。如果我错了,请有人纠正我。


0
我和你的设置基本相同(WiX 3.8,针对两个不同的平台,包括“Variables.wxi”文件...),它完全正常工作。我的最佳猜测是你的Variables.wxi文件出了问题。
要根据目标平台切换某些值,请使用$(var.Platform)变量:
<!-- x86 / x64 switch -->
<?if $(var.Platform)=x64 ?>

<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?define Win64 = "yes"?>
<?define ProductName = "Datacard EzPrint Plugin (64 bit)" ?>

<?else ?>

<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?define Win64 = "no"?>
<?define ProductName = "Datacard EzPrint Plugin" ?>

<?endif ?>

实际上,模式验证错误是由candle.exe引发的。我尝试注释Variables.wxi的内容并提供一个空的Variables.wxi。但仍然会抛出相同的错误。还有一件事是,我手动编辑了项目文件并将平台更改为x64。因为通过VS的设置不会反映在项目文件中。 - jero2rome
更新WiX项目的项目文件是我没有做过的事情。我会更新我的回复。 - Laurent PerrucheJ

0
将您的Include标签移至Wix标签之外。
错误提示您在Wix标签内有无效内容。

不确定为什么我的答案被踩了,因为它解释了错误信息并解决了问题。Wix预处理器命令通常位于Wix标记之前。 - David Watson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接