2014-01-08 16 views
0

我有一个使用Ninject的复合MVC3应用程序。它基于即插即用的概念,提供在您的核心MVC应用程序之外构建MVC应用程序模块的能力。每个模块都附加到此主MVC应用程序,并在主要MVC应用程序中拥有自己的单独文件夹,其中dll被复制与支持文件,如意见,内容等在运行MVC应用程序时锁定可插拔程序集

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

回答

0

一种方法可能是“隐藏”程序集并加载它们(这是IIS本身的作用)。基本上它们被复制到一个不同的临时位置,并从那里加载而不是实际的目录。当系统检测到原始位置的DLL变化时(例如复制了新版本),它可以回收应用程序池,将新的Dll复制到临时位置并再次加载它们。

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

相关问题