可插拔程序集在运行MVC应用程序时锁定

时间:2014-01-08 11:04:16

标签: asp.net-mvc ninject

我有一个使用Ninject的复合MVC3应用程序。它基于即插即用的概念,提供在核心MVC应用程序之外构建MVC应用程序模块的能力。每个模块都附加到这个主要的MVC应用程序,并且在主MVC应用程序中有自己独立的文件夹,其中dll被复制与视图,内容等支持文件。

使用Ninject模块程序集在应用程序启动时运行并运行正常。问题是当应用程序在IIS中运行时,程序集被锁定,我无法用修改后的程序替换现有的dll。我知道的唯一方法是重新启动应用程序池。我不想重新启动应用程序池,是否有任何其他选项可以避免DLL锁定,我可以轻松替换我的DLL。

1 个答案:

答案 0 :(得分:0)

一种方法可能是“遮蔽”程序集并以这种方式加载它们(这就是IIS自己做的事情)。基本上,它们被复制到另一个临时位置,并从那里而不是实际目录加载。当系统检测到原始位置DLL的更改(例如,已复制新版本)时,它可以回收应用程序池,将较新的Dll复制到临时位置并再次加载它们。

我猜你需要实现类似的东西来更新你的依赖DLL。请注意,在app-domain中,您无法卸载程序集。也就是说,您可以卸载app-domain。从理论上讲,您可以在自己的应用程序域中托管dll(允许您在检测到更改时卸载该域),从而避免重新启动实际的应用程序池域本身 - 但这一切都取决于系统的架构方式,而不是在你的情况下是可取的。