Підсумок
Для мене єдиним надійним способом версії програмного забезпечення є використання ідентифікатора хешу чи набору змін із вашої системи контролю версій.
Загальний номер версії збірки може бути корисним, але він є справді гарантовано унікальним лише у тому випадку, якщо у вас є сервер збірки та / або ви підписуєте кожен реліз. Для багатьох із нас це просто не під силу.
Якщо ваш проект розділений на кілька сховищ контролю версій, вам також потрібно буде створити механізм, за допомогою якого ваш користувальницький інтерфейс може запитувати кожне залежне сховище та повідомляти про його хеш назад користувачеві.
Приклад з особистого досвіду
У проекті попереднього роботодавця, де у нас виникли проблеми з тим, щоб наш (внутрішній) клієнт змінив програмне забезпечення і перекомпілював його, я розпочав процес, згідно з яким вбудовані хеш-сюжети збиралися у кожну програму та бібліотеку. Кожного разу, коли програмне забезпечення було запущене, рядок редагування створювався шляхом запитів на всі компоненти програмного забезпечення.
Цей рядок редагування відображався, коли ви переходили на сторінку about і записувався у файл журналу кожного разу при запуску програми. Вона була такої форми:
Application name (6a72e7c61f54)
Library1 (b672a13a41e1)
Library2 (9cc35769b23a)
Library2 (9cc35769b23a)
Library3 (4e9f56a0186a+)
Library2 (9cc35769b23a)
Library4 (2e3b08c4ac76)
Library1 (b672a13a41e1)
Library2 (9cc35769b23a)
З цього я легко зрозумів, що вони змінили Library3 і не здійснили цих змін у сховищі, тому вони використовують код, який не контролюється. Я також міг би порівняти хеші з моєю поточною тестовою системою, тому я міг би виявити, що вони повернули (скажімо) Library1 до більш старої версії.
Це означало, що щоразу, коли вони повідомляли про помилку, я завжди можу відновити саме той код, який використовувався під час виникнення проблеми, або, принаймні, точно знати, що не можу відтворити налаштування.
Щоб отримати докладніші відомості про систему збирання, яку я використав, як я це досягнув, які проблеми у мене виникли і що люди пропонували їх уникати, дивіться на моє запитання щодо переповнення стека .
Примітка. Ця система справді життєздатна лише в тому випадку, якщо ви використовуєте систему контролю версій, де даний хеш гарантовано призведе до того ж набору файлів у вашій робочій директорії (наприклад, git і mercurial), якщо даний робочий каталог може містити суміш файлів і каталоги з декількох версій (наприклад, svn), тоді всі ставки вимикаються щодо стану робочого каталогу, і цей метод взагалі не працюватиме.