В моем текущем проекте мы используем номер ревизии Subversion как наименее значимую (сборочную) часть номера версии, и мы используем скрипт Nant для создания файла AssemblyInfo проекта. Мы используем один и тот же номер версии для атрибутов AssemblyVersion и AssemblyFileVersion. (Остальные три части - это major.minor.point, где major.minor будет увеличиваться при каждом изменении схемы базы данных, а точка увеличивается для каждого выпуска.)
Мы начали с того, что номер сборки просто увеличивался, но для этого требовалось, чтобы файл версии регистрировался для каждой сборки, и возникали конфликты при слиянии. Когда это оказалось неосуществимым, мы начали использовать CruiseControl.NET для генерации номера сборки, но это затрудняло воспроизведение определенных сборок вручную. В конце концов мы перешли к текущей (Subversion-revision) схеме.
Примечание. К сожалению, в .NET невозможно полностью воссоздать сборку из прошлой ревизии, поскольку компиляторы .NET при компиляции кодируют текущую метку времени в объектный файл. Каждый раз, когда вы компилируете один и тот же код, вы получаете другой объектный файл.