2014-01-08 20 views
0

我有一個使用Ninject的複合MVC3應用程序。它基於即插即用的概念,提供在您的核心MVC應用程序之外構建MVC應用程序模塊的能力。每個模塊都附加到此主MVC應用程序,並在主要MVC應用程序中擁有自己的單獨文件夾,其中dll被複制與支持文件,如意見,內容等在運行MVC應用程序時鎖定可插拔程序集

使用Ninject的模塊程序集加載時,應用程序啓動並運行良好。問題是當應用程序在IIS中運行,程序集被鎖定,我不能替換現有的DLL我知道的唯一方法是重新啓動應用程序池。我不想重新啓動應用程序池,是否有任何其他選項可以避免dll鎖定,我可以輕鬆替換我的dll。

回答

0

一種方法可能是「隱藏」程序集並加載它們(這是IIS本身的作用)。基本上它們被複制到一個不同的臨時位置,並從那裏加載而不是實際的目錄。當系統檢測到原始位置的DLL變化時(例如複製了新版本),它可以回收應用程序池,將新的Dll複製到臨時位置並再次加載它們。

我猜你會需要實現類似的東西來更新你的依賴DLL。請注意,在應用程序域內,您不能卸載程序集。也就是說,你可以卸載一個應用程序域。理論上,您可以將dll託管在他們自己的應用程序域中(允許您在檢測到更改時卸載該域),從而避免重新啓動實際的應用程序池域本身 - 但這完全取決於系統的架構,可能不會在你的情況下是可取的。

相關問題