пятница, 23 октября 2009 г.

Проверка версии сборки

В один прекрасный момент вы обязательно озаботитесь алгоритмом автоматического обновления вашей программы. Простейшим вариантом такого алгоритма будет что-то вида:
  • получить с сервера текстовый файл с номером версии
  • получить номер версии запущенного приложения
  • сравнить и при необходимости провести процесс обновление файлов
Практически сразу вы столкнетесь с одной существенной проблемой - невозможностью обновить уже запущенную сборку. Фактически, существует всего три возможных варианта обхода этой проблемы:

  • запуск обновления в отдельной (независимой от обновляемых) сборке, причем работа обновляемого приложения должна быть завершена
  • динамическое создание (на лету) сборки с алгоритмом обновления, запуск ее через Process.Start, выход из основного приложения
  • запуск файла приложения с использованием механизмов службы теневого копирования, что опять таки требует наличия отдельной (внешней) сборки

В любом случае мы приходим к тому, что необходимо будет узнать текущую версию файла, который мы собираемся обновить, чтобы проверить устарел ли он. Сделать это можно следующим способом:

FileVersionInfo fi = System.Diagnostics.FileVersionInfo.GetVersionInfo(path);

версия файла (по частям) содержится тут::
            fi.FileMajorPart;
            fi.FileMinorPart;
            fi.FileBuildPart;
            fi.FilePrivatePart;
или тут:
            fi.FileVersion;

Так же я рекомендую изменять номер версии приложения в файле AssemblyInfo.cs только в атрибуте AssemblyFileVersion. Если номер версии задавать в атрибуте AssemblyVersion, то это будет приводить к полной перекомпиляции всех сборок текущего проекта, которые ссылаются на файл с изменившимся AssemblyVersion, даже если сами сборки не менялись. Если же номер версии задавать в AssemblyFileVersion, то компилироваться будут только изменившиеся сборки.

Версию уже запущенной сборки можно будет получить через Application.ProductVersion.

Комментариев нет:

Отправить комментарий