我想将合并模块文件解析为两个不同的位置。有可能吗?
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="MergeRedirectFolder">
<Component Id="LoggerClient" Guid="*">
<File Id="log4net" Name="log4net.dll" Source="..\..\_Release\log4net.dll" KeyPath='yes' />
<File Id="LoggerLibrary" Name="LoggerLibrary.dll" Source="..\..\_$(var.Configuration)\LoggerLibrary.dll" />
<File Id="app.config" Name="app.config.xml" Source="..\..\_Release\app.config.xml" />
<File Id="msvcr110.dll" Name="msvcr110.dll" Source="c:\windows\sysWoW64\msvcr110.dll" />
</Component>
</Directory>
</Directory>
</Module>
<Merge Id ="MergeModule.msm" Language ="!(loc.Lang)" SourceFile ="_$(var.Configuration)\MergeModule.msm" DiskId ="1" />
我希望将第二个文件复制到与其他文件不同的文件夹中。
答案 0 :(得分:1)
有一个概念,它被称为retargetable merge module。我已经避免使用它 - 这个概念对我来说似乎并不合适。我没有尝试与Wix合作。
我认为您可以将Wix包含文件(simple sample)与新auto-generated component guids结合使用,通过在适当的位置添加Include语句来可靠地部署此类重复文件。在这种情况下,您不能对guid进行硬编码,而是让它们由Wix编译器和链接器自动生成。
还读取 WixLibs (Wix库文件):http://robmensching.com/blog/posts/2008/10/10/what-are-.wixlibs-and-why-would-you-use-them/
Wix文档; http://wixtoolset.org/documentation/manual/v3/overview/files.html
答案 1 :(得分:0)
这取决于你在不同地点的意思。您可以构建一个包含4个文件的合并模块,每个文件位于各自的组件和目录中。可以去CommonFilesFolder;另一个到SystemFolder;另一个......你明白了。因此,如果您在每个文件的目录中创建自己的组件,那么这很容易。但是你在TARGETDIR下得到了所有这些,所以你的方向是错误的。您只需定义另一个目录以及其他组件和文件,您就可以完成,除非问题不仅仅是满足于眼睛。
答案 2 :(得分:-1)
我建议私下与我联系,就MSI,组件规则,合并模块和文件集理论进行30-60分钟的对话。写得太多了。简而言之,我会建议更多的合并模块。