В приложении .NET Compact Framework 3.5 я делаю проверку версии в довольно узком цикле, чтобы узнать, нужно ли «обновлять» другую сборку (скопировать поверх нее новую копию в другой каталог,затем запустите его снова).
Проблема в том, что Assembly.LoadFrom(path).GetName().Version
блокирует файл и предотвращает повторное копирование.
AssemblyName.GetAssemblyName(path)
будет лучшим способомполучите это (благодаря этому SO-ответу ), так как он не загружает сборку постоянно в AppDomain и, следовательно, не блокирует файл, но он недоступен в Compact Framework.
Я мог бы создать новый AppDomain
, но не могу использовать метод Load
нового домена, поскольку он не поддерживается в Compact Framework.
В качестве последнего средстваЯ подумал, что позволю загружать сборку на самом деле с перегрузкой Assembly.Load(byte[])
, что приведет к большой "утечке" памяти в узком цикле, поскольку они никогда не выгружаются.Чтобы противостоять этому, я намеревался сначала хэшировать байтовый массив сборки и проверить кэш версий для предыдущего попадания.Тем не менее, как вы уже догадались, перегрузка байтового массива для Assembly.Load()
не поддерживается в Compact Framework.
Я также рассмотрел добавление AssemblyFileVersions, так как их проще проверить в любом случае,но это еще одна вещь в растущей куче вещей, не поддерживаемых в Compact Framework (моя благодарность этому SO-ответу за то, что мне не пришлось пробовать это).
Пожалуйста, скажите мне, что я 'я пытаюсь сделать это возможно, поэтому я перестал так сильно ненавидеть этот фреймворк?