![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Есть ли в Visual studio како-йнибудь счётчик версий, номер которой можно получить каким-нибудь макросом?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
Какой нибудь может и есть! ![]() -------------------- ????? ??, ??????? ?????. ![]() |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Допустим счётчик билдов.
Хотя я думал что есть какя-нибудь внутрення тулза, которая позволяет программировать номер версии, типа: 1.n, где n - номер билда; а потом получать данное значение в коде, ввиде набора char'ов, что-нить типа __VERSION__. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Народ короче велосипеды пишет, потому что гениальный мелкоСофта не догадался сделать такой фишки. Чем же они там от студии к студии занимаются?
![]() Это сообщение отредактировал(а) Rickert - 2.4.2009, 09:45 -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Лично для меня это не надо, если уж релиз готов то его в редакторе ресурсов за 30 секунд можно вставить версию
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Dem_max, неудобно. ИМХО: номер версии - это вещь о которой программист вообще задумываться не должен ни на одну наносекунду.
Это сообщение отредактировал(а) Rickert - 2.4.2009, 10:50 -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
На сборочном конвейере такое делается всегда.
Например Automated Build Studio имеет спец step для этих целей. С чего бы изменение версий должно быть в языке?! языку на версию наплевать. лично я не задумываюсь о версии - пусть конвеер сам считает как ему надо. Например у нас это Major.Minor.BuildVersion(increment each build).Subversion(or perforce) revision of source code with builded. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Вообще-то вопрос ро конкретную среду разработки.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
вопрос, конечно интересный с точки зрения версионализации конечного продукта
но он на самом деле отпадает, если решается каким-нибудь CVS или SVN (больше возможностей) но если опираться на этот счетчик в качестве индикатора по отлову багов, то майкрософт просто предоставил решать эту проблему по своему усмотрению, не ограничивая конечного пользователя (программиста) а Build-event'ы - это как раз механизм, позволяющий такое творить формат версии продукта ведь не закреплен жестко, так что любая попытка навязать майкрософтом свое видение на проблему будет скорее расценено как ущемление прав и т.д. и т.п. (а у них с этим строго) так что любое готовое решение - скорее "вариации на тему...", а не конструирование велосипеда -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GremlinProg |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
посмотрел я некоторые счетчики и как-то не понравилось мне, что они копаются в моих же потрохах
такое лучше делать в отдельном rc-файле мой вариант - это шаблон ресурса, который парсится утилитой в момент его компиляции и генерирует на его основе rc этот rc можно подключить прямо в проект, тогда и счетчик будет работоспособным и конфликтов с существующими ресурсами не будет я приложу свой VerBuilder, а пока, как это работает: 1. подключаем в проект простой текстовый файл 2. пишем в нем нечто вроде такого:
3. Сохраняем, щелкаем на этом файле правой кнопкой мыши в Solution Explorer'е, выбираем Properties 4. Выбираем все конфигурации, ну или Release, кому как удобнее 5. Раскрываем Custom Build Step :: General 6. В Command Line пишем VerBuilder "$(InputName).ini" "$(InputFileName)" "$(InputName).rc" 7. В Outputs пишем $(InputName).rc 8. Сохраняем настройки и нажимаем Ctrl + F7 (компиляция ресурса). Если все сделано правильно, то в директории, где лежит этот текстовый файл появятся два дополнительных файла с тем же именем, но с расширениями .ini и .rc 9. Снова открываем Solution Explorer и добавляем в него файл(с расширением .rc Ну вот и все, теперь при каждом билде, этот ресурс будет обновляться в соответствии с новой версией а в консоли Output при этом, вы всегда будете наблюдать запись:
это просто пример, на самом деле, вы можете формировать свой вывод и шаблон так, как вам будет сподручнее спецификация шаблона такая:
формат командной строки:
файл VerBuilder.exe перед использованием как у меня в примере, необходимо поместить в какую-нибудь рабочую директорию MSVC, например в $(VSInstallDir)Common7\Tools\, в 9-й версии, обычно это C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools в младших версиях примерно так же Кто работает с мастерами, могут соорудить простенький мастер версий В моей версии rc.exe двухбайтовые кодировки не поддерживаются, так что конкретно при построении RC, не пользуйтесь флагами -uUe, файл генерируется правильно, даже с БОМами, но RC-компилятор просто не заточен на них, не понимает (это удобно в других случаях, например когда вам нужно версию хранить не в VERSIONINFO, а например в текстовом ресурсе, или просто во внешнем файле) по умолчанию, если флаги не определены, то считается, что вход и выход в кодировке ANSI вложенные echo наследуются, т.е. обрабатываются как парные скобки (ошибок тут не будет, даже если вы пропустили какую-нибудь скобку, максимум - просто до конца файла вывод будет дублирован в консоли) Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||||
|
|||||||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
если кому-то захочется расширить функционал транслятора, вот его исходный код:
на самом деле, тут можно добавить более гибкую работу с INI: дать возможность создать несколько счетчиков, а не один, как у меня; модифицировать эскейп-ключи; добавить комбинационную логику и т.п. вобщем, все открыто, пользуйтесь Это сообщение отредактировал(а) GremlinProg - 3.4.2009, 13:16 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GremlinProg |
|
||||||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
немного расширил возможности, пока время есть:
1. добавлен флаг -r (read-only) если он присутствует в опциях, то увеличение счетчика не происходит (только трансляция его в файл с текущим значением) зачем это нужно? чтобы на основе одного счетчика можно было собирать любое число шаблонов и только один, контрольный, будет увеличивать счетчик, остальные - только читать (в таком случае, следите за порядком включения шаблонов в цепочку компиляции, контрольный шаблон должен быть либо в ее начале, либо в конце, чтобы не было смешивания версий в промежуточных шаблонах) 2. расширена размерность счетчика, по-честному ), теперь он 64-битный 3. несколько упрощена спецификация:
через точку, думаю, будет меньше путаницы 4. счетчик переведен в натуральный диапазон, т.е. отрицательных значений он теперь никогда не сгенерирует пример шаблона со всеми вариантами:
третья строка - это обычный формат версии, который и нужно передавать в ресурсы Есть еще один плюс флага -r (read-only): отпадает необходимость усложнять транслятор, т.е. не нужно заводить переменное число счетчиков, этого эффекта можно добиться цепочкой шаблонов, к примеру, если у нас 2 счетчика: 2,34,0,6 - для файла и 1,0,0,1 - для продукта, то:
этот шаблон сгенерирует, к примеру выход для первого счетчика:
если этот выход снова подать в качестве шаблона, то получится второй счетчик:
и т.д. исходник скорректированного билдера:
если используется следующий шаблон:
то эту версию продукта можно обнаружить по следующим полям:
Программно можно обратиться к ним двумя способами: 1. Используя API для работы с версиями, например как показано здесь: http://www.ncsystems.ru/ru/programming/articles/fileversion/ 2. Используя API для работы с ресурсами:
этот вариант хоть и работает согласно спецификации ресурса VERSIONINFO, но использовать его рекомендуется только в случае, когда ресурс версии имеет идентификатор, отличный от VS_VERSION_INFO = 1 либо когда таких ресурсов несколько в обычном случае, ресурс можно использовать так:
или так:
вот Rickert, тебе и макрос ) Присоединённый файл ( Кол-во скачиваний: 9 ) ![]() -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||||||||||||||||||
|
|||||||||||||||||||||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Господа вам не лениво было писать все это ? Столько коду и чтобы показать какая у вас версия в релизе.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
не показать, Dem_max, а учесть в ней реальное число билдов
ну и плюс обратная связь, соответственно -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |