日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

DotNet開發(fā)之反射技術(shù)詳解—?jiǎng)討B(tài)庫的加載

來源: 責(zé)編: 時(shí)間:2024-05-27 17:18:34 155觀看
導(dǎo)讀反射是一種強(qiáng)大的工具,它允許程序在運(yùn)行時(shí)獲取關(guān)于類型、成員和程序集的信息,并動(dòng)態(tài)地創(chuàng)建、調(diào)用和修改代碼。今天,我們將深入探討反射的其他用法,以幫助您更好地利用這一技術(shù)。一、Assembly.Load(),Assembly.LoadFrom(),As

XLW28資訊網(wǎng)——每日最新資訊28at.com

反射是一種強(qiáng)大的工具,它允許程序在運(yùn)行時(shí)獲取關(guān)于類型、成員和程序集的信息,并動(dòng)態(tài)地創(chuàng)建、調(diào)用和修改代碼。今天,我們將深入探討反射的其他用法,以幫助您更好地利用這一技術(shù)。XLW28資訊網(wǎng)——每日最新資訊28at.com

一、Assembly.Load(),Assembly.LoadFrom(),Assembly.LoadFile()的區(qū)別

XLW28資訊網(wǎng)——每日最新資訊28at.com

1.Assembly.Load

  • Assembly.Load(string assemblyString):通過程序集的完全限定名稱(包括版本號(hào)、公鑰令牌等)或者簡單名稱來加載程序集。例如:Assembly.Load("MyAssembly, Versinotallow=1.0.0.0, Culture=neutral, PublicKeyToken=null")Assembly.Load("MyAssembly")
  • Assembly.Load(byte[] rawAssembly):從字節(jié)數(shù)組中加載程序集。這對(duì)于從網(wǎng)絡(luò)或其他非傳統(tǒng)來源加載程序集很有用。

示例用法:XLW28資訊網(wǎng)——每日最新資訊28at.com

// 根據(jù)程序集名稱加載程序集Assembly assembly = Assembly.Load("MyAssembly");// 從字節(jié)數(shù)組加載程序集byte[] assemblyBytes = File.ReadAllBytes("MyAssembly.dll");Assembly assembly = Assembly.Load(assemblyBytes);

2.Assembly.LoadFrom

  • Assembly.LoadFrom(string assemblyFile):從指定路徑加載程序集文件。
  • Assembly.LoadFrom(string assemblyFile, Evidence securityEvidence):基于安全證據(jù)加載程序集文件。

示例用法:XLW28資訊網(wǎng)——每日最新資訊28at.com

// 從文件路徑加載程序集Assembly assembly = Assembly.LoadFrom("C://MyAssemblies//MyAssembly.dll");// 基于安全證據(jù)加載程序集Evidence evidence = new Evidence();Assembly assembly = Assembly.LoadFrom("C://MyAssemblies//MyAssembly.dll", evidence);

3.Assembly.LoadFile

  • Assembly.LoadFile(string path):從指定路徑加載程序集文件。與LoadFrom不同,它會(huì)創(chuàng)建一個(gè)新的加載上下文,程序集將在該上下文中加載并解析。

示例用法:XLW28資訊網(wǎng)——每日最新資訊28at.com

// 從文件路徑加載程序集Assembly assembly = Assembly.LoadFile("C://MyAssemblies//MyAssembly.dll");

二、加載程序集的異常情況

需要注意的是,在使用這些方法加載程序集時(shí),你需要處理可能出現(xiàn)的異常情況以下可能會(huì)拋出以下幾種異常:XLW28資訊網(wǎng)——每日最新資訊28at.com

1.FileNotFoundException

XLW28資訊網(wǎng)——每日最新資訊28at.com

  • 當(dāng)指定的程序集文件無法找到時(shí),會(huì)拋出此異常。
  • 可能的原因包括:文件路徑錯(cuò)誤、文件不存在或不可訪問等。

2.FileLoadException

XLW28資訊網(wǎng)——每日最新資訊28at.com

  • 當(dāng)無法加載指定的程序集文件時(shí),會(huì)拋出此異常。
  • 可能的原因包括:無效的程序集文件、程序集版本不兼容、程序集依賴項(xiàng)無法解析等。

3.BadImageFormatException

XLW28資訊網(wǎng)——每日最新資訊28at.com

  • 當(dāng)嘗試加載無效的程序集文件格式時(shí),會(huì)拋出此異常。
  • 可能的原因包括:程序集文件不是有效的CLR程序集、程序集文件被損壞或篡改等。

4.SecurityException

  • 當(dāng)沒有足夠權(quán)限來加載程序集時(shí),會(huì)拋出此異常。
  • 可能的原因包括:缺少適當(dāng)?shù)陌踩珯?quán)限、程序集未經(jīng)數(shù)字簽名等。

5.ReflectionTypeLoadException

  • 當(dāng)加載程序集時(shí)出現(xiàn)類型加載異常時(shí),會(huì)拋出此異常。
  • 可能的原因包括:程序集中某個(gè)類型的依賴項(xiàng)無法解析、類型初始化失敗等。

6.UnauthorizedAccessException

  • 當(dāng)沒有足夠的權(quán)限訪問程序集文件時(shí),會(huì)拋出此異常。
  • 可能的原因包括:訪問權(quán)限限制、文件被占用或鎖定等。

這些異常通常會(huì)在使用Assembly.Load()方法加載程序集時(shí)的各種錯(cuò)誤情況下拋出。為了確保程序的穩(wěn)定性和可靠性,建議在使用Assembly.Load()方法時(shí)使用適當(dāng)?shù)漠惓L幚頇C(jī)制來捕獲和處理這些異常。此外,當(dāng)使用這些方法加載程序集時(shí),還要注意程序集的版本和依賴關(guān)系,確保加載的程序集符合預(yù)期,并且不會(huì)引發(fā)版本沖突或依賴項(xiàng)缺失的問題。XLW28資訊網(wǎng)——每日最新資訊28at.com

三、DLL加載規(guī)則

XLW28資訊網(wǎng)——每日最新資訊28at.com

我相信很多使用反射技術(shù)或者不使用反射技術(shù),加載程序集的時(shí)候,都曾經(jīng)遇到過BadImageFormatException的問題。在加載DLL(動(dòng)態(tài)鏈接庫)時(shí),系統(tǒng)會(huì)按照一定的路徑規(guī)則進(jìn)行搜索。以下是通常情況下的DLL加載路徑規(guī)則:XLW28資訊網(wǎng)——每日最新資訊28at.com

應(yīng)用程序目錄:系統(tǒng)首先會(huì)搜索執(zhí)行當(dāng)前代碼的應(yīng)用程序目錄。這是最常見的搜索位置,通常會(huì)將DLL文件放置在應(yīng)用程序的根目錄或相關(guān)子目錄中。XLW28資訊網(wǎng)——每日最新資訊28at.com

系統(tǒng)目錄:如果在應(yīng)用程序目錄中未找到DLL文件,則系統(tǒng)會(huì)搜索系統(tǒng)目錄。系統(tǒng)目錄通常是指 %SystemRoot%/System32(在大多數(shù)情況下為 C:/Windows/System32)。請(qǐng)注意,32位應(yīng)用程序在64位操作系統(tǒng)上可能會(huì)搜索 %SystemRoot%/SysWOW64 目錄。XLW28資訊網(wǎng)——每日最新資訊28at.com

Windows目錄:如果在系統(tǒng)目錄中未找到DLL文件,則系統(tǒng)會(huì)搜索Windows目錄。Windows目錄通常是指 %SystemRoot%/(在大多數(shù)情況下為 C:/Windows)。XLW28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)前工作目錄:如果在以上路徑中未找到DLL文件,則系統(tǒng)會(huì)搜索當(dāng)前工作目錄。當(dāng)前工作目錄是指應(yīng)用程序正在運(yùn)行的目錄。XLW28資訊網(wǎng)——每日最新資訊28at.com

環(huán)境變量指定的路徑:系統(tǒng)還會(huì)搜索在系統(tǒng)環(huán)境變量 PATH 中指定的路徑。PATH 變量包含一系列目錄路徑,用于指示系統(tǒng)在其中搜索可執(zhí)行文件和DLL文件。XLW28資訊網(wǎng)——每日最新資訊28at.com

請(qǐng)注意,搜索DLL的順序是按照上述規(guī)則從前往后進(jìn)行的,一旦找到匹配的DLL文件,搜索過程就會(huì)停止。此外,還可以使用以下方法來影響DLL的加載路徑:XLW28資訊網(wǎng)——每日最新資訊28at.com

  • 使用絕對(duì)路徑:指定DLL的完整路徑,確保系統(tǒng)可以直接訪問該路徑下的DLL文件。
  • 使用相對(duì)路徑:指定相對(duì)于應(yīng)用程序或當(dāng)前工作目錄的相對(duì)路徑。在這種情況下,需要確保指定的相對(duì)路徑是正確的。

本文鏈接:http://www.www897cc.com/showinfo-26-91014-0.htmlDotNet開發(fā)之反射技術(shù)詳解—?jiǎng)討B(tài)庫的加載

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 分布式一致性必備:一文讀懂Raft算法

下一篇: 構(gòu)建穩(wěn)固基石:C++線程安全Map的簡單實(shí)現(xiàn)與應(yīng)用

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 定日县| 苗栗市| 兰西县| 宁河县| 叙永县| 宜良县| 华蓥市| 高唐县| 新沂市| 桃源县| 宿松县| 宝应县| 穆棱市| 汨罗市| 道真| 邵武市| 临沧市| 彰化县| 新源县| 晋中市| 阿拉善左旗| 交口县| 延寿县| 龙岩市| 乌海市| 吴堡县| 文昌市| 电白县| 博爱县| 东台市| 克东县| 井研县| 灵宝市| 永和县| 得荣县| 吉林省| 高淳县| 武冈市| 桃园市| 伊金霍洛旗| 那曲县|