Служба Windows работает как служба планировщика, не может разрешить зависимые ссылки на сборки во время выполнения - PullRequest
1 голос
/ 19 июня 2010

У меня есть служба Windows, которая работает как планировщик, она расширяет интерфейс, который может быть реализован другими классами, чтобы стать плагином для этой службы. Все плагины (например, Plugin1, Plugin2 ...) будут удалены в подпапке плагина, такой как PlugIn \ Plugin1, PlugIn \ Plugin2 соответственно. Во время выполнения в каждой из подпапок (Plugin1, Plugin2) будет выполняться поиск любой сборки, реализующей интерфейс, и для соответствующего таймера будет назначен таймер.

Теперь, если Plugin1 и Plugin2 совместно используют common.dll (частная сборка), планировщик загружает его только один раз (в зависимости от того, что произойдет раньше). Если по каким-либо деловым причинам мы обновим common.dll для Plugin1 и скопируем его в папку Plugin1, сохранив Plugin2 с предыдущей версией, что станет проблемой, поскольку теперь common.dll будет загружаться недетерминированно.

Есть ли способ связать набор двоичных файлов (из соответствующей папки) с таймером во время планирования или позже?

Ответы [ 2 ]

3 голосов
/ 19 июня 2010

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

Другой (еще более изолированный) подход заключается в создании Process для вызова;это может быть очень эффективно и проще, чем обработка AppDomain s.

. Здесь имеется обширная информация о работе со AppDomain s, связанным , здесь (смотрите таблицу).

0 голосов
/ 19 июня 2010

Простым решением было бы использование ILMerge для объединения всех сборок плагина в одну сборку.Это должно позаботиться об этом.

...