Installer vs. Merge Module Recommendations
Visual Studio allows you to create two different types of installers: Windows installers (.msi) and merge modules (.msm). Windows installers are used to install applications and files on another computer; merge modules are used to install components that are shared by multiple applications.
The main distinction between the two types is the target audience. Anything that will be used directly by the end user of the application (executable files, documents, HTML pages) should be packaged in a Windows installer. Anything that can only be used by a developer (DLLs, controls, resources) should be packaged in a merge module, which can then be packaged by the developer in a Windows installer for distribution to the end user.
As a general rule, any component that is shared by more than one application (or that has the potential for being shared) should be put into its own merge module. While it is possible to put multiple components into a single merge module, it's best to create a merge module for each component in order to avoid distributing unnecessary files.
A merge module is like a snapshot of a particular version of a component. A new merge module should be created for each successive version of a component in order to avoid version conflicts.
Installers can include multiple applications, allowing you to install a suite of applications in a single step. In this case, the installer should include merge modules for all components used by any of the included applications; if a merge module is used by more than one application it only needs to be added once.
See Also
Installer vs. Merge Module Recommendations | Deployment Projects | Creating or Adding Deployment Projects | What's New in Deployment