我的 WiX项目中添加了一个客户特定文件:
<Component Id="IMPORT" DiskId="1" Guid="xxxxx">
<File Id="IMPORT" Name="Import.xml" Source="..\..\config_customerA\Import.xml"/>
</Component>
文件的其余部分对所有客户都是相同的。
现在,每个客户都有一个Wix项目。项目Wix文件完全相同,只根据客户更改上述行。我不喜欢这种解决方案,因为所有的冗余和重复(DRY原则......)。
你如何解决这个难题?
最好使用一个Wix文件,只更改指向特定客户文件的链接。
答案 0 :(得分:4)
三种可能的方法......
1)使这成为构建问题而不是安装程序问题。保留WXS并使构建自动化在构建MSI时将正确的XML文件复制到范围中。
2)使用预处理器语句抽象XML文件的路径,并将路径传递给构建,以便WXS在构建时动态指向不同的XML文件。
3)确定XML的“内容”不同,并使用XML更改功能在安装时将基本XML转换为客户特定的XML。例如,假设XML文件不同,除了一些键/值对具有客户名称的值。使用proprocessor语句为客户名称定义变量,并将客户名称传递给构建。使用预处理程序语句,以便属性获取客户名称。然后使用XmlConfig元素中的属性将客户名称应用于XML文件中的键值属性。
答案 1 :(得分:1)
一种可能的方法是将XML文件打包为“松散”(不在msi中嵌入)。您需要一个单独的Media
元素,并使用DiskId
元素上的File
引用它。然后,您有一个引用外部文件的msi文件,因此您可以随意更改每个客户的XML文件。
我在我的一个项目中完成了这项工作。这是否适合您取决于您的要求。一个缺点是这不是非常友好的下载,因为你现在有两个文件而不是一个msi。