WIX4迁移报错WIX0005:Fragment元素含意外子元素Merge求助
解决WIX 3.11迁移到4.0时的WIX0005错误
这个错误是因为WIX 4.0对Merge元素的位置规则做了变更:Merge元素不能再嵌套在DirectoryRef内部,必须直接作为Fragment、Product或Module的直接子元素。
修改步骤
- 将
Merge元素从DirectoryRef标签中移出,直接放在Fragment下,与DirectoryRef同级 - 为每个
Merge添加Directory属性,显式指定其安装目标目录(对应原DirectoryRef的Id)
修改后的代码示例
<Fragment> <!-- 将Merge元素移到Fragment下,添加Directory属性指定目标目录 --> <Merge Id="_M_myBase" SourceFile="$(var.SourceDir)\Merge.myBase.msm" DiskId="1" Language="1033" Directory="TARGETDIR" /> <Merge Id="_M_myService" SourceFile="$(var.SourceDir)\Merge.myService.msm" DiskId="1" Language="1033" Directory="TARGETDIR" /> <DirectoryRef Id="TARGETDIR"> <Component Id="_COMP_Viewer_exe" Guid="{2809A717-49AF-0429-7DD4-AEDD42DB4292}"> <File Id="_FILE_Viewer_exe" Name="Viewer.exe" KeyPath="yes" Assembly=".net" AssemblyManifest="_Viewer_exe" AssemblyApplication="_Viewer_exe" DiskId="1" Source="$(var.SourceDir)\Viewer.exe" /> <Shortcut Id="_F5F26CA032AC4A2D86A378B0EEDB6B42" Directory="_DIR_StartMenu_ProductFolder" Name="Device Viewer" Icon="Device.ico" IconIndex="0" Show="normal" Advertise="yes" /> </Component> </DirectoryRef> </Fragment>
说明
Directory属性的值要与你原本期望的安装目录Id一致(这里是TARGETDIR,和原DirectoryRef的目标目录匹配)- 其他属性(如
DiskId、Language、SourceFile)保持原有配置即可
内容的提问来源于stack exchange,提问作者Aditya Dalai
相关产品推荐
相关产品推荐

