.NET CORE 動態加載 DLL 的問題


有個系統, 需要適應不同類型的數據庫(同時只使用其中一種),如果把數據庫操作層提取出來,然后針對不同的數據庫使用不同的 DLL, 再根據不同的項目使用不同的庫, 在以前的 ASP.NET 中, 直接把相關的 DLL 復制到 BIN 目錄就可以了, .NET CORE 把 DLL 復制過去,系統不會自動加載, 系統只會自動加載 xx.deps.json 里面相關的程序集。

 

竟然不能加載 非 xx.deps.json 里定義程的序集, 那么就使用 AssemblyLoadContext 類來加載, 但是 AssemblyLoadContext 類在加載程序集的時候, 也只會加載程序集本身, 程序集所依賴的其他程序集, 也不會自動加載, 我們自己的程序集里肯定是要引用相應的數據庫操操作來實現 SQL 功能。

再復雜一點的是, 很多類庫,為不同的平台,實現了不同的版本, 如 system.data.odbc 程序集, 我們在引用的時候, 引用的是個編譯版本, 編譯版本里只有方法名稱屬性等, 方法里都是拋出異常, 然后還有個運行時, 一般放到 runtimes 目錄, 里面有 win, linux, osx, freebsd 這種系統, 正常情況下,.net core 會根據平台運行所有平台自動加載相應的目錄里的程序集。

 

AssemblyLoadContext 類根據目前測試的情況來看, 不會自動加載相應的 DLL, 都需要自己判斷去哪個目錄加載, 可以通過 System.Runtime.InteropServices.RuntimeInformation 的 IsOSPlatform 方法來判斷是哪種類型的操作系統。

 

使用 AssemblyLoadContext 類加載程序集后, 返回一個 Assembly 對象, 也只能通過 Assembly 對象來獲取相應的類型, 還是不能直接使用 Type.GetType(typeName) 的方式來獲取。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM