编译错误 - ICE80:64位组件使用32位目录

30

以下行

<Component Guid='{THE_GUID}' Id='GlobalScopePackages' >

生成以下错误:

Error   4   ICE80: This 64BitComponent GlobalScopePackages uses 32BitDirectory blablabla    c:\development\...\file.wxs

这个页面描述了错误信息。 http://msdn.microsoft.com/en-us/library/aa369034(VS.85).aspx

我该怎么修复或者抑制这个警告?仅仅抑制警告是安全的吗?

6个回答

68

嗯,尽管这是预期的方法,但它对于32位机器不起作用(即使您的程序集都编译为“任何 CPU”,也必须构建两个单独的安装程序,一个用于32位,一个用于64位)。您可以构建一个基于WiX的单一安装程序,为32位和64位系统安装文件到正确的文件夹(使用动态Win64属性等),但这将要求您禁止ICE80警告。 - BrainSlugs83

19

您还可以在不是64位的组件的<Component />标签中设置Win64="no"

但我可以确认您可以忽略此步骤。


1
这真的很奇怪——在VS2010中,ICE80等警告显示为警告,现在它们显示为错误? - BrainSlugs83

4
我希望我能够根据传入的构建参数,为x86和x64两个平台构建我的安装程序。我可以通过以下方式实现。
参考Alek Davis的博客文章,了解更多信息。
在.wxs文件中,这是一个简单的例子。
<?if $(var.Platform) = x64 ?>
    <?define Win64 = "yes" ?>
    <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?else ?>
    <?define Win64 = "no" ?>
    <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?endif ?>

<Fragment>
    <Directory Id="TARGETDIR"
           Name="SourceDir">
        <Directory Id="$(var.PlatformProgramFilesFolder)">
            <Directory Id="INSTALLFOLDER"
               Name="X" />
        </Directory>
    </Directory>
</Fragment>

<Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
        <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
        <Component Id="ProductComponent"
             Win64="$(var.Win64)">

    <File Source="$(var.X.TargetPath)" />
    <!-- TODO: Insert files, registry keys, and other resources here. -->
        </Component>
    </ComponentGroup>
</Fragment>

4

可以安全地忽略警告。


2

如果有人试图使用HEAT自动化“组件”创建过程,在V3.10之前没有可用的开关来包括Win64=yes/no。

使用Candle的-arch x64开关可以解决此问题。


1
今天我遇到了这个错误,发现安装程序项目设置为 x64 构建。所有其他项目都是 Any CPU。我只想要一个 x86 安装程序,所以将平台更改为 x86 就可以解决这个问题。
显然,如果您想要一个基于 x64 的安装程序,则上面的答案之一将解决您的问题。

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