删除所有应用程序域中对DLL的所有引用

时间:2010-03-24 11:18:20

标签: c# asp.net dll

我有一个Web应用程序,它根据数据库配置条目动态加载程序集,以执行某些操作(动态插件样式体系结构)。

对象的调用是在Factory Pattern实现中,并且对象被缓存(在工厂内的静态字典中<>),因为调用可以在一分钟内完成数千次。

对此工厂的调用来自主Web应用程序和许多Web服务,其中一些位于不同的程序集/项目中。

当我需要更新其中一个DLL时,我必须回收IIS以释放DLL。

由于这会对服务器上的其他应用程序产生影响,我想知道是否有一种方法可以在不重新启动IIS的情况下释放DLL?

3 个答案:

答案 0 :(得分:2)

除了杀死AppDomain之外,绝对没有办法卸载加载的程序集,这基本上就是你在重新启动IIS时所做的事情。

答案 1 :(得分:1)

您可以尝试重新启动应用程序池而不是整个IIS服务器。也许这会为你做到这一点

答案 2 :(得分:1)

如果你有一个需要加载和卸载的程序集,你将不得不跳过几个环。

  • 要加载的类型必须来自MarshalByRefObject
  • 要加载的类型必须来自将用于调用它们的接口
  • 您必须构建一个基于远程处理的“加载程序”,以将已加载的程序集隔离在一个可以卸载的新应用程序域中。

请参阅http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm以获得详细介绍。它有点过时并处理动态生成的代码,但鉴于您的代表我会假设您可以提取相关信息。

相关问题