Создание папки плагина для записи в 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