要么是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怎么可能在项目的其他地方呢?
我明白了。我do将组件安装的DLL保留在同一解决方案中(所示示例中的MyProject
)。
因此,是的,组件中通过宏引用的DLL存在于Visual Studio解决方案中。
我想如果他们有不同的GUID(存在于另一个项目中的DLL和我放在安装所述DLL的组件中的GUID),那么Windows Installer将有两个相同的GUID。。。事情
谢谢你们。你们真的帮助了我进入Windows安装程序的世界。
@PhileDW你的书就在我旁边,但我还没有时间真正深入研究。
WiX根据文件的路径生成guid,而不是完全随机生成。最有可能的解释是,在设置的其他地方有相同的路径。