我将crt合并了(来自<产品>):
<DirectoryRef Id="TARGETDIR" >
<Merge Id = "Microsoft_VC100_CRT_x64.msm" FileCompression = "yes" Language = "1033" SourceFile = "..\\..\\..\\..\\..\\..\\..\\external\\tools\\systemsetups\\merge_modules\\Microsoft_VC100_MFC_x64.msm" DiskId = "1" />
<Merge Id = "Microsoft_VC110_CRT_x64.msm" FileCompression = "yes" Language = "1033" SourceFile = "..\\..\\..\\..\\..\\..\\..\\external\\tools\\systemsetups\\merge_modules\\Microsoft_VC110_MFC_x64.msm" DiskId = "1" />
<Merge Id = "Microsoft_VC120_CRT_x64.msm" FileCompression = "yes" Language = "1033" SourceFile = "..\\..\\..\\..\\..\\..\\..\\external\\tools\\systemsetups\\merge_modules\\Microsoft_VC120_CRT_x64.msm" DiskId = "1" />
<Merge Id = "Microsoft_VC140_CRT_x64.msm" FileCompression = "yes" Language = "1033" SourceFile = "..\\..\\..\\..\\..\\..\\..\\external\\tools\\systemsetups\\merge_modules\\Microsoft_VC140_MFC_x64.msm" DiskId = "1" />
</DirectoryRef >
<Feature Id="Merge" Title="Merge" Absent="allow" Level="1">
<MergeRef Id="Microsoft_VC100_CRT_x64.msm"/>
<MergeRef Id="Microsoft_VC110_CRT_x64.msm"/>
<MergeRef Id="Microsoft_VC120_CRT_x64.msm"/>
<MergeRef Id="Microsoft_VC140_CRT_x64.msm"/>
</Feature>
但是光因奇怪的错误而失败:
: error LGHT0204 : ICE30: The target file marked.js is installed in [CommonAppDataFolder] by two different components on an LFN system:
尝试将所有文件安装到根(CommonAppDataFolder)文件夹中,忽略文件夹结构。但是,如果我删除合并代码,则安装程序将编译而没有错误。所有安装到权限目录中的文件。看起来像“合并”元素打破了文件夹结构。任何想法如何解决? 以及如何查找用于crt更新的msm文件,例如crt 2015 update 3的msm?
答案 0 :(得分:0)
vcredist_x64.exe :As stated before我建议您在此运行时使用可执行文件,而不是合并模块,但我认为您不允许这样做出于某种原因。
原因 :我想您应该调查确切的实际问题是什么,但是来自合并模块的ICE错误和警告是一种非常普遍的现象,通常您可以不能修复它们(合并模块之间的一致性错误,而不是您自己的设置组件和合并模块之间的一致性错误-后者是您可以修复的问题)。许多人最终压制了错误消息,以允许其生成过程“正确”运行。至少,您应该在编译的MSI中搜索marked.js
,看看有多少次发生以及它们的安装位置。
可重定向目标合并模块 :某些merge modules中具有可重定向目标目录。如果可以帮助的话,我永远不会使用这样的合并模块,因此我无法完全掌握细节。 Merge Element。还有a rough idea from Github.com。如果需要它们,请确保已设置它们。不幸的是,我不知道它们是否是。
抑制错误 :我只是将您发送给另一个答案,而不是尝试写很多关于ICE抑制的文章,而我没有太多的实践经验: How do I suppress ICE errors from merge modules。请检查该链接中的所有答案。 Arnson是WiX开发人员-不确定他的答案是否需要更新-也许他描述的功能现在存在?该屏幕快照将向您展示如何从Visual Studio中执行此抑制。仅抑制单个ICE错误和警告,请勿全部禁用。
Light.exe :如果您不使用Visual Studio,那么我相信command line switch for light.exe is: -sice:<ICE>
在通过命令行进行编译时会达到相同的效果。 Rough idea from github.com。
某些链接 :