Dot-Net

在不停止服務的情況下更新 dll

  • October 22, 2008

我想在不停止服務的情況下更新伺服器程序的 dll。我怎麼做?有點像 asp.net 如何自動拾取放在 bin 文件夾中的新 dll。

Asp.Net 使用一種稱為影子複製的技術

如果將更新的 dll 複製到應用程序的 bin 子目錄中,ASP.NET 執行時會辨識出有新程式碼要執行。由於 ASP.NET 無法將 dll 交換到現有的 AppDomain 中,因此它會啟動一個新的 AppDomain。舊的應用程序域是“drain stop”的,即允許現有請求完成執行,一旦它們全部完成,AppDomain 就可以解除安裝。新的 AppDomain 以新程式碼開始並開始接受所有新請求。

通常,當 dll 載入到程序中時,程序會鎖定 dll,您無法覆蓋磁碟上的文件。但是,AppDomains 有一個稱為 Shadow Copy 的功能,它允許程序集在磁碟上保持解鎖和可替換狀態。

執行時初始化 ASP.NET,並為 bin 目錄啟用卷影複製。AppDomain 會將它需要的任何 dll 從 bin 目錄複製到一個臨時位置,然後再將 dll 鎖定並載入到記憶體中。Shadow Copy 允許我們在更新期間覆蓋 bin 目錄中的任何 dll,而無需使 Web 應用程序離線。

引用自:https://stackoverflow.com/questions/226581