Перезапись файла dll при использовании MEF и WCF

В моем текущем проекте я отправляю DLL-файлы клиентам с помощью службы WCF. Файлы dll содержат элементы управления UserControl, которые клиенты используют для визуализации данных. Однако иногда служба вводит новые элементы управления UserControl без ведома клиентов. Когда это происходит, я отправляю новый DLL-файл клиентам, чтобы у них была последняя версия UserControls.

Однако, когда я хочу записать этот новый dll-файл на клиентский HD (используя FileStream), я получаю исключение, говорящее, что файл используется другим процессом (конечно, у клиентов всегда есть сборочная версия UserControls на их HD, так что это должно быть перезаписано).

Есть ли способ перезаписать этот файл без ошибки? Я использую MEF для чтения файлов сборки в клиентском проекте. Чтобы отправить файл сборки клиентам, я просто отправляю имя файла в виде строки и содержимое файла в массиве байтов.


person BramW    schedule 24.03.2011    source источник


Ответы (1)


Обычно это делается с помощью теневого копирования, но я ничего не могу найти окончательный относительно того, работает ли он с MEF.

Если допустимо, что ваш новый элемент управления загружается при закрытии и повторном открытии приложения, вы можете скопировать все свои плагины перед созданием с помощью MEF.

Вот сообщение в блоге, в котором кто-то пытается MEF + Shodow Copy, и особенно актуальный комментарий.

Фундаментальная проблема заключается в том, что .NET не поддерживает динамическую выгрузку сборки. Вы можете перезагрузить сборку, но вы никогда не сможете восстановить память, используемую старой.

person Tim    schedule 24.03.2011
comment
Спасибо! Когда будет введен новый элемент управления, я отправлю клиентам команду перезапуска. При запуске клиента я перезапишу сборку ДО того, как элементы управления будут загружены с помощью MEF. Это должно работать. - person BramW; 08.04.2011