Every assembly has two life forms.


At development time, it is referenced by other assemblies. Its assembly version number is burned into assemblies that reference it.


At runtime, it is loaded by the assemblies that reference it. The exactly version of the assembly loaded is determined by the reference version and the servicing policy.


Normally, the form used at development time (SDK version) is shipped once, and rarely (if ever) updated. While the form used at runtime is serviced numerous time.


This suggests that the SDK version and the released version don’t need to have the same assembly version number. This leaves so much freedom for you to decide how to version the SDK version and released version.


You can say SDK version = released version. (This is .Net framework’s model. Applications directly reference assemblies in %windir%\Microsoft.Net\Framework\<framework version>, where the released version of .Net framework reside.)


Or you can say, SDK version = 0.0, and released version = real number. And publisher policy floats 0.0 to the released version. (This is Windows’ model. For example, the referenced version for common control is For every released version of common control (QFE/SP), the version number is increased, and publisher policy is shipped to redirect version to the real number.)


Or you can say, SDK version = LKG (Last Know Good) version, and release version = real number. And publisher policy redirects LKG version to released version. (This is VC8’s model. Every VC8 binary references Microsoft.VC80.CRT LKG version 8.0.50608.0. The RTM version of Microsoft.VC80.CRT is 8.0.50727.42. Publisher policy redirects 8.0.50608.0 to 8.0.50727.42.)


So what is your model?