Versioning Components

Each assembly has a four-part version number as part of its identity. Including the version as part of the identity is essential to distinguish different versions of an assembly for the purposes of side-by-side.

This compatibility version number is physically represented as a 4-part number with the following format:

MajorVersion.MinorVersion.BuildNumber.Revision.

The parts of the version number are major, minor, build and revision. There are no semantics applied to the parts of the version number. That is, the common language runtime does not infer compatibility or any other characteristic of an assembly based on how the version number is assigned (version 1.0.0.0 of some assembly and version 2.1.0.2 are completely different identities as far as the class loader is concerned). As a developer you are free to change any portion of this number as you see fit. Even though there are no semantics applied to the format of the version number, individual organizations will likely find it useful to establish conventions around how the version number is changed. This helps maintain consistency throughout an organization and makes it easier to determine things like which build a particular assembly came from. One typical convention is as follows:

Major or minor. Changes to the major or minor portion of the version number indicate an incompatible change. Under this convention then, version 2.0.0.0 would be considered incompatible with version 1.0.0.0. Examples of an incompatible change would be a change to the types of some method parameters or the removal of a type or method altogether.

Build. The Build number is typically used to distinguish between daily builds or smaller compatible releases.

Revision. Changes to the revision number are typically reserved for an incremental build needed to fix a particular bug. You'll sometimes hear this referred to as the "emergency bug fix" number in that the revision is what is often changed when a fix to a specific bug is shipped to a customer.

An assembly with compatibility version number 2.0.0.0 is then considered incompatible with an assembly whose compatibility version number is 1.0.0.0. Also, compatibility number 2.0.2.11 is considered a QFE to compatibility number 2.0.2.1.

See Also

Versioning Strong Names | Packaging and Deployment Summary | Appendix A: Additional Packaging and Deployment Information | Appendix B: Packaging and Deployment Tools