I have a few different products that share a dll. Each product has an MSI installation package. The dll they share will be frequently updated. (1) I need to ensure that any time an installation occurs, the DLL is not overwritten by a previous version of the dll. (2) The dll should only be uninstalled if all products that need it are uninstalled. (3) If a package is uninstalled that has the newest (and current) version of the dll and another product is still on the system, I want the newer version of the dll to remain on the computer. (4) I also want the flexibility to update the dll without having to update any of the products. Is there anyway to accomplish this?

I read that making the dll a Merge Module should allow me to version the dll as a shared component. I read that this will meet criteria 1, 2, and 3. Is this correct? However, I do not know of any way to update a merge module independently of the other products. Is there some way to do this and thus satisfy criteria 4?

Is there another method that will allow me to meet all 4 criteria listed?

Thank you very much for any help you can provide.