сложность 200
Меня периодически занимают вопросы о разных мелких трюках со сборками, как скрыть одну в другой, или как делается система плагинов. Так же очень давно меня занимает вопрос как загружать и использовать библиотеки так, чтобы код работал, а сам файл библиотеки можно было бы удалить. Честно сказать к вопросу этому я подходил раза 4 в течении года и все как-то безрезультатно, наверно плохо хотел получить результат, так как другого объяснения я не вижу, но наконец все получилось хорошо и быстро, о чем я и хочу рассказать.
Теневое копирование (Shadow Copy) – позволяет работать с заблокированными файлами. Приложение может блокировать и обычно блокирует все библиотеки которые были использованы/используются в процессе работы приложения, файлы с которыми ведется работа. Под работой может подразумеваться изменение, перезапись, удаление, переименование и так далее.
Зачем оно надо?
Теневое копирование позволяет приложению не зависеть от библиотеки расположенной в директории загрузки все время работы, так как она копируется в приватную директорию в профайле пользователя. Таким образом, например, работает IIS с ASP.NET приложениями.
На мой взгляд, данная технология может быть полезна в следующих случаях:
- Система обновления приложения, когда надо обновлять библиотеки приложения и при полной загрузке их нельзя переписать.
- Система плагинов для приложения.
- Фокусы =)
После того, как определились что такое «теневое копирование» и зачем оно нужно, можно собственно перейти к обсуждению реализации.