I have been building MSI's from Visual Studio Standard/Professional for many years, and have had endless issues with not the first iteration, but future builds. Typically, the assembly manifests don't get updated properly with dependencies when I up the versions of dependencies, or maybe the MSI will have issues packaging the right versions of DLL assemblies. Also, when I rebuild MSI's with multiple projects in the Solution that cross-reference each other, I often get warnings about multiple versions of the same assembly referenced, and often I have to delete and recreate the Setup Project entirely in order to get a good subsequent build. How do others solve this issue? Do you use something besides the Setup and Deployment project template? Do you use WIX?
If you don't mind spending money, InstallShield has always been a top notch installer. I've used it many times and it can be customized a million different ways. Unfortunately, the price is a little salty.
For a free solution, Inno Setup works very well, however, it cannot create MSI's. It can only create .EXE executables.
As Reed suggested, Wix is also a very good option as well!