今天說一說.NET 中的插件技術(shù),即 應(yīng)用程序熱升級。在很多情況下、我們希望用戶對應(yīng)用程序的升級是無感知的,并且盡可能不打斷用戶操作的。
雖然在Web 或者 WebAPI上,由于多點的存在可以逐個停用單點進(jìn)行系統(tǒng)升級,而不影響整個服務(wù)。但是 客戶端卻不能這樣做,畢竟用戶一直在使用著。
那么有沒有一種方式,可以在用戶無感知的情況下(即、不停止進(jìn)程的情況下)對客戶端進(jìn)行升級呢?
答案是肯定的, 這就是我今天想說的插件技術(shù)、可以對應(yīng)用程序進(jìn)行熱升級。當(dāng)然這種方式也同樣適用于 ASP.NET ,
不過當(dāng)前隨筆是以 WPF為例子的,并且原理是一樣的、代碼邏輯也是一樣的。
一、應(yīng)用程序域AppDomain
在介紹插件技術(shù)之前、我們需要先了解一些基礎(chǔ)性的知識,第一個就是應(yīng)用程序域AppDomain.
操作系統(tǒng)和運行時環(huán)境通常會在應(yīng)用程序間提供某種形式的隔離。 例如,Windows 使用進(jìn)程來隔離應(yīng)用程序。 為確保在一個應(yīng)用程序中運行的代碼不會對其他不相關(guān)的應(yīng)用程序產(chǎn)生不良影響,這種隔離是必需的。這種隔離可以為應(yīng)用程序域提供安全性、可靠性, 并且為卸載程序集提供了可能。
在 .NET中應(yīng)用程序域AppDomain是CLR的運行單元,它可以加載應(yīng)用程序集Assembly、創(chuàng)建對象以及執(zhí)行程序。<