Я использую стороннюю DLL, которая читает файл при первом его использовании, но никогда не проверяет его на наличие изменений. Моя идея состояла в том, чтобы просто загрузить DLL в AppDomain и выгрузить DLL после того, как я сделаю свой первый вызов - поэтому я стираю состояние DLL при каждом вызове (более или менее).
AssemblyName name = AssemblyName.GetAssemblyName(@"C:\fake.dll");
AppDomain newDomain = AppDomain.CreateDomain("DomainName");
Assembly lib = newDomain.Load(name);
...
//Use the Assembly
AppDomain.Unload(newDomain);
Этот блок кода может быть запущен несколько раз в секунду - неэффективно, но пока это мой единственный вариант с этой DLL ...
Проблема в том, что память DLL, кажется, существует даже в других доменах приложений, которые я создаю - она все еще использует то же значение, которое было найдено при первом чтении файла (и никогда больше не проверяется). Единственный способ заставить библиотеку DLL снова прочитать файл - это перезапустить службу.
Я не понимаю AppDomain или я должен атаковать это под другим углом?
Редактировать : Проблема загрузки DLL в мой собственный домен была решена с помощью класса MarshalByRefObject (спасибо!), Но я не хочу, чтобы он был междоменным. Я хочу, чтобы эта DLL жила и умирала в этом одном домене приложений - будет ли достаточно метода Unload, чтобы разбить все надежды на то, что состояние этой библиотеки DLL появится в другом домене приложений?