мое приложение считывает данные DLL из кеша. но если какой-либо разработчик изменяет DLL, DllCaching должен измениться. Поэтому я использовал FileSystemWatcher для обнаружения любых изменений в библиотеках DLL.Как использовать FileSystemWatcher для изменения данных кеша?
Мой Systen Watcher Механизм ниже: этот проект находится в asp.net
public void CreateFileWatcher(string path)
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = path;
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.IncludeSubdirectories = true;
watcher.Filter = "*.dll";
// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnChanged);
// Begin watching.
watcher.EnableRaisingEvents = true;
}
private static void OnChanged(object source, FileSystemEventArgs e)
{
//FillCache
}
Button1_Click
{
CreateFileWatcher(@"C:/data")
// like that:
myarray = CachData
}
Как это сделать? как загрузить dll (снова загружается) при изменении Dll.
Как вы загружаете эти DLL в первый круг? – Oliver
Перезагрузка DLL может быть сложной, см. Здесь: http://stackoverflow.com/questions/1024072/how-to-reload-an-assembly-for-a-net-application-domain – pingoo
Кроме того, серверных приложений, это может быть просто невозможно. Представьте себе, что у вас есть dll с методами, которые извлекают данные из SQL-сервера поблизости. Как вы, вероятно, гарантируете, что все клиенты одновременно будут работать с единственной версией DLL этого соединения? Что произойдет, если некоторые из клиентов будут работать (и подумают, что они работают с самой последней DLL, возможны) с тем, что разорвать «по-старому», в то время как другие загружают новую DLL, а SQL-сервер будет страдать от вложений или удалений ? –