我是一个4年多的复杂WPF
项目的新手,具有WPF
技术的基本知识,来自基于网络的产品。
产品总是针对两个客户发布,品牌不同,下面是一些差异:
1. Images in the resources folder.
2. Change (name, target, icon) in the installer project.
3. Installer general properties > change {AddRemoveProgramsIcon , Product Name , Title}/
4. Installer UpgradeCode.
5. Update msi installer name.
6. Remove dlls from references.
7. Config. files: CommonAssemblyInfo.cs> change AssemblyTitle, AssemblyProduct
8. Search and replace in many String resources files.
那么,是否有一种可行的方法可以自动完成所有或大部分手动步骤?我发现了一些关于Pre和Post构建操作的文章,但之前从未尝试过,如果它是合适的解决方案,将涵盖多少点?
谢谢。
答案 0 :(得分:1)
这基本上是离散数学/集理论的一个练习。在Windows Installer世界中,您可以创建合并模块来封装一组组件。在最简单的示例中,您需要三个合并模块:
1)客户端A文件合并模块
2)客户端B文件合并模块
3)公共文件合并模块
如果要安装多个可选功能,可以进一步拆分公共文件。如果客户端A文件和客户端B文件包含这些可选功能的唯一配置数据,也可以将其拆分。
最好还使用自己的品牌和图标创建唯一的EXE名称(ClientA.exe和ClientB.exe),这样当您将它们用于各自的合并模块时,您可以为它们提供唯一的快捷方式信息。使这些EXE非常薄的胶合板具有共同DLL中的核心功能(DRY:不要重复自己)
最后,您创建了2个非常薄的胶合代码的MSI项目。只包含ProductName,UpgradeCode,Feature Treee和Dialog UI。没有文件,因为所有文件都没有通过合并模块引用。
如果您使用Windows Installer XML或InstallShield等工具来生成UI,则有一种方法可以在单个项目中构建两个MSI,而不会重复。这进入了非常先进的创作,并且需要在深入研究高级抽象之前对“基本”MSI创作有一个坚定的理解。此外,WiX支持“Fragments”,InstallShield支持“开发人员安装清单”,但严格来说只是Windows Installer,所有工具都支持合并模块。