3

我有Visual Studio 2012、WiX 3.8 安装项目和Burn bootstrapper。如果我以 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”不能包含文本。预期的可能元素列表:“捆绑产品模块补丁片段 PatchCreation”。somefile.wxs 2 1 Some.Installer Installer_x64\Some.Installer)

当我删除包含标签时,它会编译。但是我需要在引用一些变量的其他文件中使用此类包含指令。我真的不明白这里的问题。包含标签非常适合 32 位,那么如果我将它与 64 位目标一起使用它为什么会引发错误?这里有什么问题?

是否有为不同平台创建设置的最佳实践?我还在使用 Burn 引导程序和英语和德语的本地化。我在 Stack Overflow 上遇到过类似的问题,但到目前为止没有任何帮助。

4

3 回答 3

2

错误在项目文件中。在我的菜单Build -> Configuration Manager中,我将Active构建配置设置为Release|x64。但是,Visual Studio 不会自动将我的项目文件内容更改为Release|x64

当我手动编辑项目文件时,我将平台更改为 x64,但我错过了将配置更改为Release。它处于Debug|x64模式,而我的 Visual Studio 安装正试图在Release|x64模式下编译。现在,当我将项目文件手动编辑为Release|x64时,错误已解决,我的设置正在编译。

但是,据我所知,当它是 Visual Studio 2012 的问题时,我仍然不明白为什么 candle.exe 给了我这个错误。如果我错了,有人纠正我。

于 2014-01-09T16:00:09.430 回答
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 ?>
于 2014-01-09T10:59:00.443 回答
0

将您的标签移到Include标签之外Wix

Wix该错误告诉您标签内有无效内容。

于 2014-01-09T14:41:41.943 回答