Windows服务像调度程序服务一样运行,无法在运行时解析依赖的程序集引用

时间:2010-06-19 07:13:49

标签: c# .net assemblies

我有一个像调度程序一样运行的Windows服务,它扩展了一个接口,可以由其他类实现,以成为此服务的插件。所有插件(例如Plugin1,Plugin2 ......)都将被分别插入PlugIn的子文件夹,如PlugIn \ Plugin1,PlugIn \ Plugin2。在运行时,将搜索每个子文件夹(Plugin1,Plugin2)以查找实现该接口的任何程序集,并使用相应的dll方法调度计时器。

现在,以防Plugin1& Plugin2共享一个common.dll(私有程序集),调度程序只加载一次(无论哪个先发生)。如果出于某些商业原因,我们更新了Plugin1的common.dll并将其复制到Plugin1文件夹中,使Plugin2保留了以前的版本,这就成了一个问题,因为现在common.dll将被非确定地加载。

有没有办法在调度时或以后将这组二进制文件(来自相应文件夹)与计时器绑定?

2 个答案:

答案 0 :(得分:3)

在我看来,这里要做的就是为每个插件/实现创建一个AppDomain,并使用每个插件文件夹作为bin路径。这样,每个插件都可以使用自己的一组完全隔离的程序集运行。

另一种(甚至更孤立的)方法是每次呼叫创建Process;这可能非常有效,比处理AppDomain更简单。

有关使用AppDomain链接from here的大量信息(请参阅下表)。

答案 1 :(得分:0)

一个简单的解决方案是使用ILMerge将插件的所有程序集合并到一个程序集中。这应该照顾它。