Теневое копирование библиотек

сложность 200

Меня периодически занимают вопросы о разных мелких трюках со сборками, как скрыть одну в другой, или как делается система плагинов. Так же очень давно меня занимает вопрос как загружать и использовать библиотеки так, чтобы код работал, а сам файл библиотеки можно было бы удалить. Честно сказать к вопросу этому я подходил раза 4 в течении года и все как-то безрезультатно, наверно плохо хотел получить результат, так как другого объяснения я не вижу, но наконец все получилось хорошо и быстро, о чем я и хочу рассказать.

Теневое копирование (Shadow Copy) – позволяет работать с заблокированными файлами. Приложение может блокировать и обычно блокирует все библиотеки которые были использованы/используются в процессе работы приложения, файлы с которыми ведется работа. Под работой может подразумеваться изменение, перезапись, удаление, переименование и так далее.

Зачем оно надо?

Теневое копирование позволяет приложению не зависеть от библиотеки расположенной в директории загрузки все время работы, так как она копируется в приватную директорию в профайле пользователя. Таким образом, например, работает IIS с ASP.NET приложениями.

На мой взгляд, данная технология может быть полезна в следующих случаях:

  • Система обновления приложения, когда надо обновлять библиотеки приложения и при полной загрузке их нельзя переписать.
  • Система плагинов для приложения.
  • Фокусы =)

После того, как определились что такое «теневое копирование» и зачем оно нужно, можно собственно перейти к обсуждению реализации.

Подробнее

Теневое копирование библиотек

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