天天看點

C# 動态加載元件後怎麼在開發環境中調試

C# 動态加載元件後怎麼在開發環境中調試

動态加載元件

那就是簡單的Assembly.Load動态加載dll而以。這網上資料也有不少。基本的思路基本上就是在本地上一個指定目錄如【plugs】存在着一堆dll檔案。主程式在初始運作時一般會把指定目錄下的dll一次性用Assembly.Load加載進來。隻要把指定目錄變成從網絡加載,或者加載指定目錄前先檢查網絡上的是否有新版本。這就簡單做成個最簡單版本的熱更新。

多數網上的資料就是然後就沒有然後了。很多人就發現産品是通過動态加載元件了。但開發人員根本無法調試啊。不能調試就意味着開發難度大啊。出了Bug我都不知道怎麼查錯。難度開發就要像在正式環境那樣子不停的寫log檔案。如果這樣子的動态加載真的得不嘗失。隻是簡單的動态加載對産品做出的優化可能隻是5%,但對于開發效率來講這可不止減少5%的問題。當有也有不少人為了能讓元件項目能調試都會建立一個項目直接引用元件項目。通過這種曲線救國的方式來解決問題的。

開發環境中怎麼調試

用VS IDE開發時為什麼能夠調試。VS IDE在的操作原理還是通過Ms-build來生成程式集的。隻有dll存在了才能進行調試斷點的。這我為動态加載也是加載了dll檔案了那怎麼斷點沒有效果呢。那細心的人也知道在生成程式集的時,同時還生成了一個同名稱的pdb檔案。有興趣的朋友可以在百科上找到相關資料。說白了有了這個pdb檔案才能用VS IDE進行調試斷點的。

用VS建立方案

C# 動态加載元件後怎麼在開發環境中調試

MyPlatform為主項目,主要用于動态加載元件。

MyPlatform.Standard為定義标準的接口項目。所有的基礎接口,抽像類都應該出自這個項目。

MyPlatform.ModuleHelloWord為第一個元件模組。寫代碼的人第一個功能都是HelloWord。

定義元件規則

IPlugModule,IPlugItem為每個元件模組定義好要顯示的名稱,和調用指定元件時入口方法。先定義了最基本功能以後再加另的功能。

C# 動态加載元件後怎麼在開發環境中調試

實作第一個元件模組

HelloWordModule,HelloWordPlug做為第一個元件模組,實作的功能當然也是最簡單的。

C# 動态加載元件後怎麼在開發環境中調試
C# 動态加載元件後怎麼在開發環境中調試

實作動态加載

想動态加載元件。前兩步定義好規則和第一個元件模組也出來了。現在到主項目平台來了。要動态加載還是要一個元件管理功能來管理加載對應的元件模組項目。元件管理隻應該有從那裡加載模組特定。按這分析。元件管理類

C# 動态加載元件後怎麼在開發環境中調試

按照這定義好完善功能。

C# 動态加載元件後怎麼在開發環境中調試

IDE項目設定

為了友善開發調試。對項目使用設定。

  1. MyPlatform項目-》屬性-》生成-》輸出
C# 動态加載元件後怎麼在開發環境中調試
  1. MyPlatform.ModuleHelloWord輸出為位置為元件模組加載目錄
C# 動态加載元件後怎麼在開發環境中調試
  1. 對解決方案進行設定。右鍵屬性-》項目依賴。把元件也選上。這所講的依賴并不是主項目引用了元件項目,而是在生成主項目前先把選中的項目生成成功再生成編譯主項目。
C# 動态加載元件後怎麼在開發環境中調試

輸出效果

C# 動态加載元件後怎麼在開發環境中調試

從項目上來看,怎麼什麼輸出資訊都沒有呢。打開元件目錄發現什麼都沒有。原來都沒有生成元件到這個目錄。那你可能就是忘記上面送出到第三步設定。請回去看一次。

C# 動态加載元件後怎麼在開發環境中調試

這就簡單的能動态加載了。這的思路和網上的基本上都一樣的。但發現就是不能斷點調試。不能調試這就是在耍流氓嘛。

修改代碼支援斷調試

檢視Assembly.Load的方法發現有意思的重載。除了加載一個流檔案的方法。可以發現還有三個方法是加載兩流檔案的。一個帶有安全參數的方法。不過由于第一個已經過時棄用,建議使用第三個方法。那其實就隻有兩個方法可用。那就是說在加載時能同時把pdb程式調試資料庫也能加載了。這就能很好解決VS IDE能調用的問題了。

C# 動态加載元件後怎麼在開發環境中調試

改動代碼。加載dll檔案時判斷pdb檔案是否存在,存在則一并加載。這方法也使用在debug模式下。那正式環境一般不會把pdb檔案也釋出出去。是以就走了分支。

C# 動态加載元件後怎麼在開發環境中調試

能調試的輸出效果

C# 動态加載元件後怎麼在開發環境中調試

附上源代碼:https://files.cnblogs.com/files/DasonKwok/MyPlatformV1.zip

原文位址

https://www.cnblogs.com/DasonKwok/p/10510218.html

繼續閱讀