I know the standard Major.Minor.Build.Revision but there's several considerations for us that are somewhat unique
-We do internal releases almost daily, occasionally more than once a day.
-Windows Installer doesn't check Revision so that's almost moot for our purposes.
-Major and Minor numbers ideally are only updated for public releases and should be done manually.
-That leaves the Build # that needs to be automatically updated.
-We want internal releases to be able to be performed from any developer's machine so that leaves out using x.x.* in Visual Studio because different numbers could be generated from different machines and each build isn't guaranteed to be larger than the previous.
-We have about 15 or so projects as part of the product so saving the version numbers in SVN isn't ideal since every release we'd have commit all those files.
Given those criteria I can't really come up with a good versioning scheme. The last 2 criteria could be dropped but meeting all of those seems ideal. A date stamp is insufficient because we might do more than one a day, and given the max size of Uint16 (around 64000) (Actually using WiX it complains about numbers higher than Int16.MaxValue) a date/time won't fit.