Перезапись файла dll при использовании MEF и WCF - PullRequest
2 голосов
/ 24 марта 2011

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

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

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

1 Ответ

2 голосов
/ 24 марта 2011

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

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

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

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

...