Теневое копирование сборок
Обновлен: Ноябрь 2007
Теневое копирование позволяет обновлять используемые в домене приложения сборки без выгрузки домена приложения. Это особенно полезно для приложений, которые должны быть доступны постоянно, таких как сайты ASP.NET.
Среда CLR блокирует файл сборки при загрузке сборки, поэтому файл не может быть обновлен до тех пор, пока сборка не выгружена. Единственным способом выгрузить сборку из домена приложения является выгрузка домена приложения. Таким образом, в обычных условиях сборка не может быть обновлена на диске до тех пор, пока не выгружены все домены приложений, использующие ее.
Когда домен приложения настроен на теневое копирование файлов, сборки из пути приложения копируются в другое расположение и загружаются из этого расположения. Копия заблокирована, но исходный файл сборки разблокирован и может быть обновлен.
Важное примечание. |
---|
Единственными сборками, которые подлежат теневому копированию, являются сборки, хранящиеся в каталоге приложения или в его подкаталогах, указанных в свойствах ApplicationBase и PrivateBinPath при настройке домена приложения. Хранящиеся в глобальном кэше сборки не подлежат теневому копированию. |
Следующий список описывает способы использования свойств класса AppDomainSetup для настройки домена приложения для теневого копирования.
Чтобы разрешить теневое копирование, необходимо присвоить свойству ShadowCopyFiles строковое значение "true".
По умолчанию в результате этого все сборки из пути приложения будут копироваться в кэш загрузки, прежде чем они будут загружены. Это тот же кэш, который поддерживается средой CLR для хранения файлов, загруженных с других компьютеров. Среда CLR автоматически удаляет файлы, если они больше не требуются.
При необходимости задайте произвольное местоположение для теневой копии файлов с помощью свойства CachePath и свойства ApplicationName. Базовый путь к расположению формируется путем присоединения свойства ApplicationName к свойству CachePath в качестве подкаталога. Сборки копируются в подкаталоги этого пути, а не в сам путь.
Примечание. Если свойство ApplicationName не задано, то свойство CachePath игнорируется и используется кэш загрузки. Исключение не создается.
Если указано произвольное расположение, пользователь самостоятельно выполняет очистку каталогов и скопированных файлов, если они больше не требуются. Автоматическое удаление не выполняется.
Существует несколько причин, по которым требуется указание произвольного расположения для теневой копии файлов. Может потребоваться задать произвольное расположение для теневой копии файлов в случае, если приложение создает большое количество копий. Кэш загрузки ограничен по размеру, а не по времени существования, поэтому возможно, что среда CLR попытается удалить файл, который все еще используется. Также необходимо указывать произвольное расположение, если пользователь приложения не имеет прав на запись в каталог, который среда CLR использует для кэша загрузки.
При необходимости можно ограничить копируемые сборки с помощью свойства ShadowCopyDirectories.
При включении теневого копирования домена приложения по умолчанию будут копироваться все сборки из пути приложения — то есть, из каталогов, указанных в свойствах ApplicationBase и PrivateBinPath. Можно ограничить копирование выбранных каталогов, создав строку, содержащую только те каталоги, теневую копию которых требуется создать, и присвоив эту строку свойству ShadowCopyDirectories. Для разделения каталогов используется точка с запятой. Единственными сборками, которые подлежат теневому копированию, являются сборки из выбранных каталогов.
Устаревшие методы
Класс AppDomain содержит несколько методов, в том числе SetShadowCopyFiles и ClearShadowCopyPath, которые могут использоваться для управления теневым копированием домена приложения, но они помечены как устаревшие в платформе .NET Framework версии 2.0. Рекомендуемым способом настройки домена приложения для теневого копирования является использование свойств класса AppDomainSetup.
См. также
Ссылки
AppDomainSetup.ShadowCopyFiles