2010-03-24 53 views
0

我有一個Web應用程序,它根據數據庫配置條目動態加載程序集以執行某些操作(動態插件樣式體系結構)。刪除所有應用程序域中對DLL的所有引用

對這些對象的調用是在一個工廠模式實現中,並且該對象被緩存(在Factory中的一個靜態字典<>中,因爲一分鐘內可以調用幾千次。

這個工廠的調用是由主Web應用程序和一些web服務組成的,有些在不同的程序集/項目中。

當我需要更新其中一個DLL時,我必須回收IIS才能獲得DLL。

由於這對服務器上的另一個應用程序有影響,我想知道是否有一種方法可以在不重新啓動IIS的情況下發布DLL?

回答

1

您可以嘗試重新啓動應用程序池而不是整個IIS服務器。也許這會爲你做詭計

+0

好主意 - 我會研究這個。 – cjk 2010-03-25 15:58:21

2

絕對沒有辦法卸載加載的程序集,而不是殺死AppDomain,這基本上是您在重新啓動IIS時所做的。

1

如果你有一個程序集,你需要加載和卸載,你將不得不跳過幾個箍。

  • 裝載必須從MarshalByRefObject的派生
  • 類型被裝載必須從將被用來調用它們的接口派生類型
  • 必須構建基於「裝載機」一個遠程對加載的程序集隔離在一個新的appdomain中,可以卸載。

查看http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm的一個很好的介紹。它有點過時並處理動態生成的代碼,但給予你的代表我會假設你可以提取相關信息。

+0

聽起來像很多工作,但感謝您的信息。 – cjk 2010-03-25 15:57:43

+0

@ck it *是很多工作。但是你做你必須做的。 – 2010-03-25 16:43:24

相關問題