2010-09-27 29 views
4

有沒有辦法在應用程序運行在C#時更新DLL?例如,如果有一個函數如下所示的DLL:在運行時更新應用程序的庫(DLL)?

void write() 
{ 
    Console.WriteLine("LALALA"); 
} 

而且它在調用之間的睡眠時間爲1秒的線程中調用。現在

,我寫的新版本:

void write() 
{ 
    Console.WriteLine("LA LA LA\n"); 
} 

我可以與運行時這個新的更新舊的DLL?重要的是,我的應用程序一直在運行,沒有米什麼......但我想更新庫是一個例外。我錯了嗎?

+0

通過.NET遠程處理和使用獨立的應用程序域,這是非常困難和極其出色的規劃。 – leppie 2010-09-27 12:27:20

回答

3

如果您的代碼可以在邏輯上分離成單獨的DLL,您可以使用(如其他人所述)遠程或System.AddIn框架。取決於功能的集成程度,它可能太複雜和/或矯枉過正。 System.AddIn方法的一個好處是可以卸載程序集,用新版本代替dll,並在不停止應用程序的情況下重新加載,但它僅爲輕量級插件體系結構設計,並且跨越「隔離邊界」的性能不是將不會如此偉大。

如果區域足夠小(類似http://www.ironpython.net/),那麼腳本也可能非常有用 - 您可以將代碼存儲在文本文件(或數據庫或任何地方)中並從那裏加載/運行它。然後,只需替換代碼並重新加載它。

我想這一切都歸結爲您是否可以確定可能發生什麼變化,以及是否存在適合它的隔離過程。要做到整個應用程序並不容易!

3

無法更新DLL正在使用時,但是你可以。

  • 使該DLL的一個副本,一個新的文件名
  • 加載DLL的複製到一個應用程序域
  • 談話到應用程序域與.NET遠程
  • 當原始的dll文件的變化重複以上步驟

這就是Asp.net所做的。所以另一種選擇是使用Aps.net來託管你的應用程序。

相關問題