Сегодня обнаружил занимательный баг в .NET Framework. У меня версии всех assemblies устанавливаются следующим образом:
[assembly: AssemblyVersion("2.0.61225.0")]
Это означает, что это версия продукта 2 и скомпилирована она 25 декабря 2006 года.
Так вот, сегодня я сделал билд и номер версии соответственно стал 2.0.70116.0 на что компилятор мне выдал следующую ошибку:
Error emitting 'System.Reflection.AssemblyVersionAttribute' attribute -- 'The version specified '2.0.70116.0' is invalid'
Я пошел искать помощи на http://forums.microsoft.com/ и нашел там таких же как и я:). Оказывается, что части версий хранятся как 16-bit numbers (что, кстати не документировано нигде!) и это число не может превышать 65535!!!
Как workaround предлагают следующее:
string buildNumber = String.Format("{0}{1:000}", DateTime.Today.ToString("yy"), DateTime.Today.DayOfYear);
Для сегодняшней даты 01/16/2007 этот код возвратит "07016".
Для последнего дня года, 12/31/2007, код возвратит "07365"
А 1/1/2008 будет "08001"