I'm currently learning the vagaries of WiX and Windows installer and I've hit a stumbling block.
The project that I'm currently packaging is made up of six discrete chunks. For now let's call them A, B, C, D, E, and F.
Chunk A is a set of common libraries and utilities that are used by every other project. It does not present any end-user functionality.
Chunk B is another set of common libraries and utilities that require functionality provided by Chunk A. This seems odd, but the architecture is beyond my ability to influence or control.
Chunk C is a third set of common libraries and utilities that require functionality provided by chunks A and B. This seems even more odd than before, but I still have no ability to change this.
Chunks D, E, and F, all require the functionality provided by chunks A, B, and C.
If possible, I would like to make sure that there is only one installation of chunks A, B, and C, that are shared across the installations of D, E, and F. I have been given the assurance that chunks A, B, and C will retain stable APIs so that they may be upgraded without breaking the functionality of D, E, or F.
My immediate thought is to create merge modules for the components in A, B, and C, then reference them in the features provided by the separate installers for D, E, and F. This would bloat up the installers, but it would guarantee that the necessary components are installed. Unfortunately, I fear that it would cause problems inside the Windows Installer validation when upgrading.
Another thought that I had was to make a single installer for A, B, and C and require it in the installers for D, E, and F via a ComponentSearch.
Does either idea make sense? If neither idea makes sense, do you have any recommendations for a correct way to do it?