1

我的 wxs 文件中的两个组件标签如下

<Component Id="Comp.Comp1" Guid="*" >
<Condition><![CDATA[VersionNT < 602]]></Condition>
<File Id="File1" Source="$(Dir1)\TestFile.dll" />
 </Component>

<Component Id="Comp.Comp2" Guid="*" >
<Condition><![CDATA[VersionNT >= 602]]></Condition>
<File Id="File2" Source="$(Dir2)\TestFile.dll" />
 </Component>

但是我收到如下错误

ICE08: Component: Comp.Comp2 has a duplicate GUID: {2963D8E7-CBEC-50C8-AF4B-65E895FE3283}   

即使我给了一个自动生成的 guid 值“*”,我是如何得到这个错误的

谢谢,

4

2 回答 2

8

元素的 star-GUIDComponent根据文件的目标位置计算出稳定的 GUID。GUID的稳定性对于未来的更新(尤其是修补)至关重要。它在许多情况下都很好用,但将文件放入完全相同的位置的互斥组件不是一个。在这种情况下,您需要显式设置至少一个Component/@Guids.

在上述情况下,您可以执行以下操作:

<Component Id="Comp.Comp1" Guid="*" >
    <Condition><![CDATA[VersionNT < 602]]></Condition>

    <File Id="File1" Source="$(Dir1)\TestFile.dll" />
</Component>

<Component Id="Comp.Comp2" Guid="PUT-GUID-HERE">
    <Condition><![CDATA[VersionNT >= 602]]></Condition>

    <File Id="File2" Source="$(Dir2)\TestFile.dll" />
</Component>

从技术上讲,您可以在这种情况下抑制 ICE08 错误,因为组件是互斥的,但我个人会在抑制 ICE 之前执行上述操作。恕我直言,最好是不同的文件最终具有不同的 GUID。

于 2013-04-23T14:48:22.280 回答
1

您没有显示此片段的上下文(目录元素),但对我来说,您似乎将相同的文件名安装到同一目录两次。这是违反组件规则的。“来源”不同,但条件相同:!VersionNT >= 602。

于 2013-04-23T14:01:54.137 回答