Come up with a versioning scheme that fits your program. There are plenty of tools when you get into build automation that can increment parts of your version. I have done all of the following in my professional work:
- Only ever incrementing major/minor at the order of management, because advertisement was based on version
X.X
coming out "next"
- This was also important since new features always went to a forward version, but we would backport bugfixes to some previous releases, which WOULD increment their third number. Thus,
4.2.3.x
might actually be "newer" than 4.3.2.x
but would lack 4.3
features.
- Padding the third or fourth component in order to prevent sorting confusion when seeing
x.x.x.0021
versus x.x.x.0100
- Using the fourth number as the SVN commit number, making version lookups a complete breeze during bug reproduction
- Making the third or fourth number autoincrement on every automated build, especially useful when you have an autoupdate component and a CI system like Jenkins or TeamCity
- Using a "special" identifier for build/release versions; specifically using a
666
in the third or fourth number for dev versions as a sort of "warning"
My ultimate point is that while there are general guidelines out there and you should absolutely upvote Lloyd for pointing out the ones on MSDN, be aware that the requirements of your project, management, or pipeline will often have a heavy influence on your versioning scheme,. and it's more important to come up with something and stick to it.