We are C# shop (and just starting with TFS) with number of different solutions (and there are lot of them) that represent different components, that we deploy on fairly large number of production servers. Currently, component installations are done manually, where developer would go on each server and install/de-install component (components installation files are .msi, that we create using WIX for each individual component). Of course, problem becomes that eventually someone will forget to install a newer component on production servers and only after going through the other servers, you will find out that you are dealing with outdated component. And we are terrible at keeping track of what did what the servers.

Technically, we can place all existing solutions under one solution and have a single .msi - install file that encompasses entire range of projects. But this will create one massive solution and one massive MSI file. Though, this is clearly solves all the problems.

So what are the ways to version deployments of different software as one piece ?

2 Answers 2


It's very common for systems to be composed of many dependent parts that depend on specific versions being deployed. Here are my suggestions that will help eliminate the problem of having an out of date component:

  • Automate your deployments. Human error is inevitable, but if you start automating your deployments piece by piece, your deployments will become more consistent and less prone to these kinds of errors.
  • Package a product and all its dependencies under the same installer. You shouldn't be able to install a component if its dependency is not installed. You shouldn't merge solutions to create an MSI from multiple solutions. You should be able to link components from package management (Nuget) to build your amalgamated installer. Having fewer installers to run will cut down on the deployment mistakes.

You could take lessons from how pythons pip and NuGet/Chocolatey work where you will have one, or more, top level packages with a requirements that specified which packages they depend on, complete with optional minimum, maximum or exact versions.

It is also worth taking a look at how tools like Vagrant, Packer & Docker handle things.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.