Suppose I have a piece of software which I'm about to release but am making some final changes for - the release version of this product will be 1.3. The next planned release of this product will be 1.4 and I want other people in my team to work on that in parallel to the final changes I'm making for 1.3. In order for the product to be tested, we're making pre-customer-release test releases; for each of those we're versioning our assemblies using semantic versioning - so if someone makes a minor change in an assembly, that assembly's 2nd component gets upped just before the next test release. This is needed so that the installer for the product knows which assemblies to replace during an upgrade install and which it doesn't need to replace.
Suppose we have Example Assembly.dll and that DLL is currently at version 3.0.0.0; one of my team members makes a minor change to it for the next 1.4 test release thereby making it 3.1.0.0. I then make a minor change to it for the next 1.3 test release thereby also making it 3.1.0.0. We now have two different 3.1.0.0 versions of the same assembly meaning that if I attempted to upgrade my 1.3 test release to their 1.4 test release, Example Assembly.dll wouldn't change. Would it therefore be correct for the next 1.4 test release to have Example Assembly.dll become version 3.2.0.0 so long as there were no major changes made to that assembly but regardless of whether there were any minor, build or revision changes to it for 1.4?
Here's a table to illustrate the problem:
| Change Type | Change Occurred in Product Version | Test Release Number | Assembly Version (Last Release) | New Assembly Version | Comments |
|---|---|---|---|---|---|
| Minor | 1.4 | 1 | 3.0.0.0 | 3.1.0.0 | |
| Minor | 1.3 | 25 | 3.0.0.0 | 3.1.0.0 | This is a different 3.1.0.0 to the 1.4's 3.1.0.0 |
| Minor, Build, Revision or None | 1.4 | 2 | 3.1.0.0 | 3.2.0.0 | This is now 3.2.0.0 as it's incorporated the 3.1.0.0 changes from 1.3 |
| Minor | 1.3 | 26 | 3.1.0.0 | 3.2.0.0 | This is a different 3.2.0.0 to 1.4's 3.2.0.0 thereby breaking the upgrade install to 1.4 from 1.3 again! |