首页 > 解决方案 > 找到重复的符号“文件:X.dll”,但文件具有不同的路径

问题描述

当我编译我的 WIX 项目时,我收到以下错误:

错误 LGHT0091:找到重复的符号“文件:X.dll”。这通常意味着一个 Id 是重复的。检查以确保给定类型(文件、组件、功能)的所有标识符都是唯一的。
错误 LGHT0092:与先前错误相关的符号位置。

<file>我的组件是这样定义的,并且每个元素都发生了两个错误。

<!-- ... -->
<Component Id="AXdll" Guid="{12CFD2B0-CB29-458C-BCEF-35C9AFA88363}" Directory="A">
    <File KeyPath="yes" Source="!(bindpath.A)\X.dll" />
</Component>
<!-- ... -->
<Component Id="BXdll" Guid="{3DE33C12-72FD-412A-8685-BE4A6FB5A538}" Directory="B">
    <File KeyPath="yes" Source="!(bindpath.B)\X.dll" />
</Component>
<!-- ... -->

这两个 X.dll 文件是位于不同目录中的不同文件。

标签: wix

解决方案


正如指定的,<file>标签没有ID属性。当 WIX 遇到此问题时,它会创建一个默认 ID。它通过仅获取Source属性的文件名来完成此操作。因此,这两个文件位于不同的目录中并不重要,它们仍然具有相同的 ID“X.dll”。

为了纠正这个问题,有必要明确地给出 ID 属性,如下所示:

<!-- ... -->
<Component Id="AXdll" Guid="{12CFD2B0-CB29-458C-BCEF-35C9AFA88363}" Directory="A">
    <File ID="A_X.dll" KeyPath="yes" Source="!(bindpath.A)\X.dll" />
</Component>
<!-- ... -->
<Component Id="BXdll" Guid="{3DE33C12-72FD-412A-8685-BE4A6FB5A538}" Directory="B">
    <File ID="B_X.dll" KeyPath="yes" Source="!(bindpath.B)\X.dll" />
</Component>
<!-- ... -->

推荐阅读