2010-03-12 47 views
5

我需要實現以加載插件架構在.NET:卸載

  • 自定義用戶定義的動作C#/淨內的插件架構
  • 爲定製數據網格/轉換
  • 數據類型處理代碼/ ...

來自非靜態鏈接彙編文件。

因爲應用程序必須處理許多自定義用戶定義的操作,所以Iam需要在執行後卸載它們以減少內存使用量。

我發現了幾個好文章關於插件體系結構,如:

但沒有人給了我足夠的香腸進行正確的卸載部件。因爲程序是要分發的,用戶定義的操作是(作爲名稱狀態)用戶定義的:如何防止程序集執行惡意代碼(例如,關閉我的程序,刪除文件)?

你們其中有人遇到過什麼其他的陷阱嗎?

+0

所以,你的應用程序的單個實例將運行足夠長的時間,你要關心的內存使用情況?因爲最簡單的方法是等到應用程序退出。如果應用程序永遠不會退出,那麼效果不佳! – 2010-03-12 01:05:56

+0

以及我正在開發一個客戶端服務器架構,至少服務器應該運行很長時間(至少我希望如此:-) – 2010-03-12 07:02:52

+1

+1在你的問題中使用「香腸」! – Eccentropy 2013-07-31 19:59:29

回答

4

你有沒有想過使用MS的加載宏和擴展性框架? http://msdn.microsoft.com/en-us/magazine/cc163476.aspx

邁克爾

+0

@Michael:這個框架處理卸載問題嗎? – 2010-03-12 01:18:12

+0

@John:託管Addin框架使用AppDomains來實現插件架構,是的,它將處理卸載。雖然有很多代碼需要編寫,但是它可以從代碼中抽取AppDomain邏輯。 – 2010-03-12 01:21:28

+0

謝謝,看起來像我需要的! – 2010-03-12 09:18:53

4

一種技術是將其他程序集加載到單獨的AppDomain中。卸載AppDomain將卸載程序集。

+0

新AppDomain中的這些附加程序集將如何與來自主AppDomain的東西進行對話? – BjarkeCK 2014-09-20 16:29:06

+0

看看[DoCallBack](http://msdn.microsoft.com/en-US/library/system.appdomain.docallback.aspx)可以幫助你,但是一般來說,[RTFM](http://msdn.microsoft.com/zh-CN/) COM/EN-US /庫/ System.AppDomain.aspx)。 – 2014-09-20 18:21:23

1

您無法卸載單個組件。您只能通過卸載它們所屬的AppDomain來卸載一組程序集。

這實際上就是SQL CLR的工作原理和ASP.NET--通過爲用戶提供的程序集提供一個瞬態AppDomain。