из того, что я понял до сих пор, прочитав этот документ, например: http://msdn.microsoft.com/en-us/library/ms404279.aspx, Теневое копирование - это функция, которая позволяет использовать сборку во время загрузки приложения.
Из вышеприведенного документа:
Среда выполнения общего языка блокирует файл сборки при загрузке сборки, поэтому его невозможно обновить до тех пор, пока сборка не будет выгружена.Единственный способ выгрузить сборку из домена приложения - выгрузить домен приложения, поэтому при нормальных обстоятельствах сборка не может быть обновлена на диске до тех пор, пока не будут выгружены все использующие ее домены приложений.Когда домен приложения настроен для теневого копирования файлов, сборки из пути приложения копируются в другое место и загружаются из этого места.Копия заблокирована, но исходный файл сборки разблокирован и может быть обновлен.
Но иногда кажется, что загруженная сборка не заблокирована, и поэтому Теневая копия бесполезна.
Чтобы проиллюстрировать этот момент, я создал простую библиотеку A.dll с таким кодом:
using System;
public class A
{
public A()
{
Console.WriteLine("A");
}
}
Затем я загружаю ее в домен приложений с кодом, подобным следующему:
using System;
using System.Reflection;
class Test
{
static void Main()
{
AppDomainSetup configuration = new AppDomainSetup
{
ShadowCopyFiles = "false"
};
AppDomain appDomain = AppDomain.CreateDomain("", null, configuration);
Console.WriteLine(appDomain.ShadowCopyFiles);
Assembly assembly = appDomain.Load("A");
assembly.CreateInstance("A");
Console.ReadLine();
assembly.CreateInstance("A");
}
}
Так что я ожидал, что пока программа зависает на ReadLine , я не смогу использовать сборку A.dll, но, похоже, она вообще не заблокирована: IМожно даже удалить его!
Так вот мои вопросы:
1) Почему в этом примере загруженная сборка не заблокирована?
2) Когда блокировка сборки, т. Е. Когда теневое копирование является полезной функцией?
Заранее спасибо за помощь.