C#反射加載程序集并使用

具體實現參考:

C# 動態加載DLL通過反射調用參數、方法、窗體_c#反射加載dll并傳入參數-CSDN博客

C#進階學習--反射(Reflection) - 知乎

走進C#反射機制 - 知乎

1.使用過程
//創建數據集
Assembly outerAsm = Assembly.LoadFile("D:/your.dll");//獲取調用類型聲明,要把命名空間帶上
Type typeClass = outerAsm.GetType("namespace1.classNameA");//獲取靜態方法聲明
MethodInfo methodStatic = typeClass1.GetMethod("staticFunc");//調用無參靜態方法
object methoVal = methodStatic.Invoke(null, null);//創建實體,有參構造
object obj1 = Activator.CreateInstance(typeClass, new object[]{ para1,para2,...,paraN });//創建實體,無參構造
object obj2 = Activator.CreateInstance(typeClass, null });//獲取非靜態方法聲明
MethodInfo methodGetInit = typeProduct.GetMethod("nonStaticFunc");//調用無參非靜態方法
methodGetInit.Invoke(obj1 , null);//獲取名為Property1的訪問器
PropertyInfo propertyInfo = typeProduct.GetProperty("Property1");聲明//獲取product中名為Property1的訪問器的值
object obj1 = propertyInfo.GetValue(product);
2.loadfrom、loadfile

參考:Assembly.LoadFile 方法 (System.Reflection) | Microsoft Learn

1)loadfrom

加載程序集的時候會連帶性的加載,會連帶把該文件所依賴的dll也加載

2)loadfile

僅加載一個文件,不會連帶把該文件所依賴的dll也加載

3.其他補充

1)當前,在一個AppDomain中只能加載dll,不能卸載,因此在一個AppDomain中不能有同名的dll程序集

2)一個線程屬于一個AppDoMain

參考:C# AppDomain 詳解

3)AssemblyResolve

AssemblyResolve一般配合load方法使用,在load方法找不到程序集的時候,會調用AssemblyResolve解決沖突

AppDomain.CurrentDomain.AssemblyResolve -= OnAssemblyResolve;
List<string> Searchs = new List<string>() {"path1","path2" };
Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
{var assemblyName = new AssemblyName(args.Name);foreach(var item in Searchs){var file = string.Format("{0}.dll", System.IO.Path.Combine(item, assemblyName.Name));if (File.Exists(file)){return Assembly.LoadFile(file);}}return args.RequestingAssembly;
}

4)常見的沖突

要動態加載的dll跟輸出目錄中的dll沖突了,尤其是調用loadfrom的時候,其所依賴的dll一般會從輸出目錄中獲取,但是輸出目錄中的dll并不是你想要的依賴版本,這時候就會沖突

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210856.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

rancher harvester deploy demo 【部署 harvester v1.2.1】

簡介 Harvester 是一個現代的、開放的、可互操作的、基于Kubernetes的超融合基礎設施(HCI)解決方案。它是一種開源替代方案&#xff0c;專為尋求云原生HCI解決方案的運營商而設計。Harvester運行在裸機服務器上&#xff0c;提供集成的虛擬化和分布式存儲功能。除了傳統的虛擬機…

pgsql存儲過程

由于部分企業數據庫從aws遷移到騰訊云&#xff0c;導致有一個定時任務&#xff08;從詳情表匯總數據到統計表中&#xff09;錯過了觸發&#xff0c;所以這部分企業的數據需要觸發重新刷一下&#xff0c;但是又有規定白天不允許上線&#xff0c;只能把定時任務的邏輯用存儲過程&…

SQL SELECT 語句

SELECT 語句用于從數據庫中選取數據。 SQL SELECT 語句 SELECT 語句用于從數據庫中選取數據。 結果被存儲在一個結果表中&#xff0c;稱為結果集。 SQL SELECT 語法 SELECT column1, column2, ... FROM table_name; 與 SELECT * FROM table_name; 參數說明&#xff1a; …

五花八門客戶問題(BUG) - 用好strace

strace簡介 strace是一個用于跟蹤系統調用和信號傳遞的Linux命令,它是一個集診斷、調試、統計于一體的工具。strace可以監控用戶空間進程和內核的交互,比如系統調用、信號傳遞、進程狀態變更等。它底層使用內核的ptrace特性來實現其功能。 strace最簡單的用法是執行一個指定…

二分查找|雙指針:LeetCode:2398.預算內的最多機器人數目

作者推薦 本文涉及的基礎知識點 二分查找算法合集 滑動窗口 單調隊列&#xff1a;計算最大值時&#xff0c;如果前面的數小&#xff0c;則必定被淘汰&#xff0c;前面的數早出隊。 題目 你有 n 個機器人&#xff0c;給你兩個下標從 0 開始的整數數組 chargeTimes 和 runnin…

Django回顧7

一.Django緩存 1.緩存介紹 在動態網站中,用戶所有的請求,服務器都會去數據庫中進行相應的增,刪,查,改,渲染模板,執行業務邏輯,最后生成用戶看到的頁面. 當一個網站的用戶訪問量很大的時候,每一次的的后臺操作,都會消耗很多的服務端資源,所以必須使用緩存來減輕后端服務器的壓力…

算法:最長公共前綴(橫向掃描和縱向掃描)

橫向掃描 時間復雜度 O(m * n)&#xff0c;空間復雜度O(1) /*** param {string[]} strs* return {string}*/ var longestCommonPrefix function(strs) {// 先把第一個字符串拿出來let str strs[0]// 用 startsWith 檢查數組中每個字符串是否以當前字符串為前綴while(!strs.e…

聽GPT 講Rust源代碼--src/tools(11)

File: rust/src/tools/rust-analyzer/crates/hir/src/lib.rs 在Rust源代碼中&#xff0c;rust/src/tools/rust-analyzer/crates/hir/src/lib.rs文件的作用是定義了Rust語言的高級抽象層次&#xff08;Higher-level IR&#xff0c;HIR&#xff09;。它包含了Rust語言的各種結構和…

Python:核心知識點整理大全10-筆記

目錄 5.4 使用 if 語句處理列表 5.4.1 檢查特殊元素 toppings.py 5.4.2 確定列表不是空的 5.4.3 使用多個列表 5.5 設置 if 語句的格式 5.6 小結 第6章 字 典 6.1 一個簡單的字典 alien.py 6.2 使用字典 6.2.1 訪問字典中的值 6.2.2 添加鍵—值對 6.2.3 先創建一…

智能優化算法應用:基于蜉蝣算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于蜉蝣算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于蜉蝣算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.蜉蝣算法4.實驗參數設定5.算法結果6.參考文獻7.MA…

JAVA+SSM+springboot+MYSQL企業物資庫存進銷存管理系統

。該系統從兩個對象&#xff1a;由管理員和員工來對系統進行設計構建。主要功能包括首頁、個人中心、員工管理、項目信息管理、倉庫信息管理、供應商管理、項目計劃管理、物資庫存管理、到貨登記管理、物資出庫管理、物資入庫管理等功能進行管理。本企業物資管理系統方便員工快…

linux 定時任務

使用 crontab Usage: crontab [-u user] [-e|-l|-r] Crontab 的格式說明如下: * 逗號(‘,’) 指定列表值。如: “1,3,4,7,8″ * 中橫線(‘-’) 指定范圍值 如 “1-6″, 代表 “1,2,3,4,5,6″ * 星號 (‘*’) 代表所有可能的值 */15 表示每 15 分鐘執行一次 # Use the ha…

C++編程法則365天一天一條(24)RTTI運行時類型信息typeid和type_info

文章目錄 基本用法編譯時或運行時判定 基本用法 typeid 是 C 的一個運算符&#xff0c;它用于獲取表達式的類型信息。它返回一個 std::type_info 對象引用&#xff0c;該對象包含有關表達式的類型的信息。 要使用 typeid 運算符&#xff0c;需要包含 <typeinfo> 頭文件…

關于振動試驗

這是試驗的說明&#xff08;來自gbt4710-2009&#xff09; 這是試驗的參數&#xff1a; 一、試驗方向&#xff1a; 振動試驗中有幾個方向 除有關規范另有規定外&#xff0c;應在產品的三個互相垂直方向上進行振動試驗。 一般定義產品長邊為X軸向&#xff0c;短邊為Y軸向&…

飛書面試題匯總

面試相關經驗 Interview | JavaGuide(Java面試 學習指南) 同學1 7次面試 編程題匯總&#xff1a; 有序鏈表找中位數 &#xff08;飛書1面&#xff09; m個有序數組合并 &#xff08;飛書1面&#xff09; 海量數據尋找TopK&#xff08;口述&#xff09; &#xff08;飛書…

Android 10(Q) 以上普通 APP 隱藏應用圖標問題探究及解決方案

1、實驗環境 aosp 版本 10.0 系統 aosp 版本 13.0 系統 2、驗證結果 2.1 方式一 APP AndroidManifest.xml 中通過 activity-alias 配置帶 LAUNCHER 屬性 category&#xff0c;并且 android:enabled“true” 10.0 系統中可安裝后正常顯示 icon&#xff0c;通過 setComponen…

idea中run和debug是灰色的

【現象】idea中run和debug是灰色的 點擊 旁邊的Add Configuration…一看都是空白 【解決方法】&#xff1a; npm點開之后 【結果】

文本轉圖像 學習筆記

VQGAN (Vector Quantized Generative Adversarial Network) 是一種基于 GAN 的生成模型&#xff0c;可以將圖像或文本轉換為高質量的圖像。 VQ &#xff08;Vector Quantization&#xff09;是一種數據壓縮技術&#xff0c;是指將連續數據表示為離散化的向量。輸入的圖像或文本…

轉換NC或HDF數據時候轉出數據無坐標信息的處理方法

有時候我們在轉換NC或HDF數據時&#xff0c;有時候會出現沒有坐標信息的情況&#xff01;如下圖&#xff1a; 這種情況一般是原始數據將坐標信息存儲在說明文件中以便后期做生成坐標信息的處理、或坐標存儲的形式比較特殊&#xff0c;造成工具無法讀取&#xff01;這種數據處理…

Python迭代器與生成器研究記錄

Python迭代器與生成器研究記錄 前言 迭代器肯定是可迭代對象&#xff0c;但是可迭代對象不一定是迭代器&#xff0c;生成器一定是迭代器&#xff0c;但是迭代器不一定是生成器 生成器是特殊的迭代器&#xff0c;所以生成器一定是迭代器&#xff0c;迭代器一定是可迭代對象 我…