【问题标题】:WiX gives component duplicate GUID error message when using star使用星号时,WiX 会给出组件重复的 GUID 错误消息
【发布时间】:2017-11-09 18:47:34
【问题描述】:

要么是我对 WiX 不了解的地方,要么是历史上最大的巧合一次又一次地发生。

我有一个<Component/> 元素。在这个组件中,我将 GUID 分配为星号.....就像你做的那样。

            <Component Id="Component_PowershellDLL"
                   Guid="*">
                   <File Source="$(var.MyProject.ProjectDir)System.Management.Automation.dll"/>
            </Component>

(我知道我应该使用 Nuget 来访问这个 DLL,但那是另一回事了......)

当我编译时,我得到这个错误信息:

Component/@Id='Component_PowershellDLL' 有一个 @Guid 值'{guid-here}',它复制了此包中的另一个组件。

组件中的 DLL 在项目的其他地方使用,但它唯一存在的地方是“MyProject”文件夹(因此,(var.MyProject.ProjectDir))。

没有在我去掉星星并放入一个普通的旧 Guid 时收到错误。

任何人都可以对此有所了解吗?我的印象是,当使用星号时,它只会生成一个新的 Guid。那么它生成的 Guid 怎么可能在项目的其他地方呢?


我明白了。我确实将组件安装的 DLL 保留在同一解决方案中(所示示例中的MyProject)。

所以,是的,组件中通过宏引用的 DLL 存在于 Visual Studio 解决方案中。

我想如果他们有不同的 GUID(存在于另一个项目中的 DLL 和我放入安装所述 DLL 的组件中的 GUID),那么 Windows Installer 将有两个 GUID 用于相同的东西......

谢谢大家。你们是我涉足 Windows Installer 世界的真正帮助。

@PhileDW 你的书就在我身边,但我还没有时间真正深入了解它。

【问题讨论】:

  • 如果你得到一个有用的答案,你应该接受它。 stackoverflow.com/help/accepted-answer
  • 在我的情况下,这似乎是由长 File/@Source 路径(或者可能是带有句点的目录名?)Wix 应该根据文件名部分生成 GUID of Source=".​​..",但我的猜测是它错误地解析了源路径,并基于所有文件相同的路径的一部分生成...

标签: wix windows-installer components guid


【解决方案1】:

WiX 根据文件路径生成 guid,而不是完全随机生成。最可能的解释是您在设置的其他地方有相同的路径。

【讨论】:

  • 要为 Bob 添加更多上下文,它会确定性地生成一个 GUID,以便遵循组件引用规则并且升级将继续正常工作。如果它只是在每次构建时创建一个全新的随机 GUID,Windows Installer 将无法跟踪相同的组件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 2018-07-15
  • 1970-01-01
相关资源
最近更新 更多