我們正在開發一個Web應用程序,它擁有大量的插件DLL文件。現在如何避免使用BuildManager.AddReferencedAssembly
,我們能夠載入我們需要的所有組件,但我們使用BuildManager.AddReferencedAssembly,而這樣做。我猜 - 這會導致一個小問題。
的問題是,我們需要更新這些DLL文件,無需重新啓動應用程序,但同時應用程序運行這些DLL文件被鎖定。
我們沒有使用這些dll文件的bin文件夾。我們使用的是2個不同的文件夾(第一個 - 〜/插件 - 由我們複製文件,第二個 - 〜/ PTEMP - 文件夾用於複製位於plugins文件夾下的文件,然後加載應用程序就像在bin文件夾中的)
正如您在應用程序正在運行時所瞭解的那樣,您可以覆蓋bin文件夾中的文件,這意味着可以在應用程序運行時覆蓋項目程序集。
經過一番研究,我發現,它可以通過在appdomainsetup使用私人文件夾的東西,但無法弄清楚如何。 (我們不希望再創建一個應用程序域,我們希望這些文件位於PTEMP文件附加到主域)
對不起我的英語不好,但是如果可以的話,請幫助我們。
順便說一句,這些dll文件中的一部分包含一些mvc區域。
我們正在使用.NET 4.5,4的mvc
如果有必要,我可以張貼一些代碼。
順便說,我想通了,上的文件的鎖定可通過AppDomain.CurrentDomain.AppendPrivatePath(pluginsTempPath)引起;線。任何方式,我們不能覆蓋這些DLL文件在臨時插件文件夾中,我們需要。現在,無需重新啓動應用程序就可以更新dll。 – zokkan
(評論問題超過12個月後):開始考慮將插件加載到他們自己的AppDomains中 –
將插件加載到他們自己的應用程序域中是可能的,但是當數據在應用程序域之間傳遞時,您將產生序列化/反序列化成本。而不是「本地執行某些事情」的情況,它將變得更像是「調用遠程服務」。 – John