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
進行除錯斷點的。
myplatform為主專案,主要用於動態載入元件。
myplatform.standard為定義標準的介面專案。所有的基礎介面,抽像類都應該出自這個專案。
myplatform.modulehelloword為第乙個元件模組。寫**的人第乙個功能都是helloword。
定義元件規則
iplugmodule,iplugitem為每個元件模組定義好要顯示的名稱,和呼叫指定元件時入口方法。先定義了最基本功能以後再加另的功能。
做為第乙個元件模組,實現的功能當然也是最簡單的。
想動態載入元件。前兩步定義好規則和第乙個元件模組也出來了。現在到主專案平台來了。要動態載入還是要乙個元件管理功能來管理載入對應的元件模組專案。元件管理只應該有從那裡載入模組特定。按這分析。元件管理類
按照這定義好完善功能。
為了方便開發除錯。對專案使用設定。
myplatform專案
-》屬性
-》生成
-》輸出
myplatform.modulehelloword輸出為位置為元件模組載入目錄
對解決方案進行設定。右鍵屬性-》專案依賴。把元件也選上。這所講的依賴並不是主專案引用了元件專案,而是在生成主項目前先把選中的專案生成成功再生成編譯主專案。
從專案上來看,怎麼什麼輸出資訊都沒有呢。開啟元件目錄發現什麼都沒有。原來都沒有生成元件到這個目錄。那你可能就是忘記上面提交到第三步設定。請回去看一次。
這就簡單的能動態載入了。這的思路和網上的基本上都一樣的。但發現就是不能斷點除錯。不能除錯這就是在耍流氓嘛。
檢視assembly.load的方法發現有意思的過載。除了載入乙個流檔案的方法。可以發現還有三個方法是載入兩流檔案的。乙個帶有安全引數的方法。不過由於第乙個已經過時棄用,建議使用第三個方法。那其實就只有兩個方法可用。那就是說在載入時能同時把
pdb程式除錯資料庫也能載入了。這就能很好解決
vs ide
能呼叫的問題了。
改動**。載入dll檔案時判斷
pdb檔案是否存在,存在則一併載入。這方法也使用在
debug
模式下。那正式環境一般不會把
pdb檔案也發布出去。所以就走了分支。
附上源**:
C 動態載入元件後如何在開發環境中除錯詳解
動態載入元件 那就是簡單的assembly.load動態載入dll而以。這網上資料也有不少。基本的思路基本上就是在本地上乙個指定目錄如 plugs 存在著一堆dll檔案。主程式在初始執行時一般會把指定目錄下的dll一次性用assembly.load載入進來。只要把指定目錄變成從網路載入,或者載入指定...
在頁面載入後在設定embed 的src 怎麼實現?
script function script 1 embed 和 object 因為資料 video,audio,flash,activex 的特殊性,跟一般dom處理上有所不同,在載入後瀏覽器會拒絕改變它們的 src 屬性。box var box document.getelementbyid b...
C 下反射動態載入dll後如何解除安裝?
最近在做專案的時候,遇到乙個需求,需要通過選擇的檔案,先判斷是c dll還是c dll,再判斷dll是否是我們需要的特定dll,還是別的隨便乙個dll。經過研究發現,我們可以通過反射來載入dll,如果用c 的反射機制可以正確載入dll,那麼就可以認為該dll是c 型別的,如果不能正確載入,我們再通過...