Создание папки плагина для записи в ASP.NET

Я использую MEF в приложении ASP.NET на основе плагинов. Проводка File System Watcher с Container.Refresh() любой новый плагин загружается автоматически после копирования в папку плагинов.

Проблема в том, когда я хочу удалить или заменить загруженный плагин. Он заблокирован w3wp и не может быть удален. Я читаю о Shadow Copy но не могу найти хороший пример или статью.

2 ответа

Решение

Попробуйте добавить папку плагинов в AppDomainSetup.ShadowCopyDirectories. Это свойство представляет собой разделенный точкой с запятой список каталогов, содержащих сборки, которые следует загружать с помощью теневых копий.

Обычно вам также нужно установить AppDomainSetup.ShadowCopyFiles в "true" но я думаю, что это уже по умолчанию для доменов приложений ASP.NET.

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

Вероятно, проще, безопаснее и эффективнее просто остановить службу, обновить библиотеки DLL и перезапустить.

Убедитесь, что вы очищаете все неуправляемые ресурсы должным образом. Похоже, что вы, возможно, открыли файловый поток, но не закрыли / не удалили его должным образом, и это может заблокировать файл тем процессом, который работал с ним в первую очередь. Больше информации о using Скажите здесь: http://www.blackwasp.co.uk/UsingStatement.aspx

Другие вопросы по тегам