成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DotNet開發之反射技術詳解—動態庫的加載

開發 后端
反射技術是指在程序運行時動態地獲取類型信息、訪問對象成員(如屬性、方法、字段等)以及調用對象的方法的能力。在許多編程語言中都有反射機制,包括 Java、C#、Python 等。

反射是一種強大的工具,它允許程序在運行時獲取關于類型、成員和程序集的信息,并動態地創建、調用和修改代碼。今天,我們將深入探討反射的其他用法,以幫助您更好地利用這一技術。

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

1.Assembly.Load

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

示例用法:

// 根據程序集名稱加載程序集
Assembly assembly = Assembly.Load("MyAssembly");

// 從字節數組加載程序集
byte[] assemblyBytes = File.ReadAllBytes("MyAssembly.dll");
Assembly assembly = Assembly.Load(assemblyBytes);

2.Assembly.LoadFrom

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

示例用法:

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

// 基于安全證據加載程序集
Evidence evidence = new Evidence();
Assembly assembly = Assembly.LoadFrom("C:\\MyAssemblies\\MyAssembly.dll", evidence);

3.Assembly.LoadFile

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

示例用法:

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

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

需要注意的是,在使用這些方法加載程序集時,你需要處理可能出現的異常情況以下可能會拋出以下幾種異常:

1.FileNotFoundException

  • 當指定的程序集文件無法找到時,會拋出此異常。
  • 可能的原因包括:文件路徑錯誤、文件不存在或不可訪問等。

2.FileLoadException

  • 當無法加載指定的程序集文件時,會拋出此異常。
  • 可能的原因包括:無效的程序集文件、程序集版本不兼容、程序集依賴項無法解析等。

3.BadImageFormatException

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

4.SecurityException

  • 當沒有足夠權限來加載程序集時,會拋出此異常。
  • 可能的原因包括:缺少適當的安全權限、程序集未經數字簽名等。

5.ReflectionTypeLoadException

  • 當加載程序集時出現類型加載異常時,會拋出此異常。
  • 可能的原因包括:程序集中某個類型的依賴項無法解析、類型初始化失敗等。

6.UnauthorizedAccessException

  • 當沒有足夠的權限訪問程序集文件時,會拋出此異常。
  • 可能的原因包括:訪問權限限制、文件被占用或鎖定等。

這些異常通常會在使用Assembly.Load()方法加載程序集時的各種錯誤情況下拋出。為了確保程序的穩定性和可靠性,建議在使用Assembly.Load()方法時使用適當的異常處理機制來捕獲和處理這些異常。此外,當使用這些方法加載程序集時,還要注意程序集的版本和依賴關系,確保加載的程序集符合預期,并且不會引發版本沖突或依賴項缺失的問題。

三、DLL加載規則

我相信很多使用反射技術或者不使用反射技術,加載程序集的時候,都曾經遇到過BadImageFormatException的問題。在加載DLL(動態鏈接庫)時,系統會按照一定的路徑規則進行搜索。以下是通常情況下的DLL加載路徑規則:

應用程序目錄:系統首先會搜索執行當前代碼的應用程序目錄。這是最常見的搜索位置,通常會將DLL文件放置在應用程序的根目錄或相關子目錄中。

系統目錄:如果在應用程序目錄中未找到DLL文件,則系統會搜索系統目錄。系統目錄通常是指 %SystemRoot%\System32(在大多數情況下為 C:\Windows\System32)。請注意,32位應用程序在64位操作系統上可能會搜索 %SystemRoot%\SysWOW64 目錄。

Windows目錄:如果在系統目錄中未找到DLL文件,則系統會搜索Windows目錄。Windows目錄通常是指 %SystemRoot%\(在大多數情況下為 C:\Windows)。

當前工作目錄:如果在以上路徑中未找到DLL文件,則系統會搜索當前工作目錄。當前工作目錄是指應用程序正在運行的目錄。

環境變量指定的路徑:系統還會搜索在系統環境變量 PATH 中指定的路徑。PATH 變量包含一系列目錄路徑,用于指示系統在其中搜索可執行文件和DLL文件。

請注意,搜索DLL的順序是按照上述規則從前往后進行的,一旦找到匹配的DLL文件,搜索過程就會停止。此外,還可以使用以下方法來影響DLL的加載路徑:

  • 使用絕對路徑:指定DLL的完整路徑,確保系統可以直接訪問該路徑下的DLL文件。
  • 使用相對路徑:指定相對于應用程序或當前工作目錄的相對路徑。在這種情況下,需要確保指定的相對路徑是正確的。
責任編輯:姜華 來源: 今日頭條
相關推薦

2024-05-21 10:23:02

反射技術.NET編程語言

2021-12-29 07:44:50

Dotnet 代碼系統

2013-01-06 12:23:59

Android開發SQLite數據庫

2021-10-24 06:50:52

AndroidClassLoaderJava

2023-10-17 09:26:44

Java工具

2025-01-20 09:09:59

2009-02-03 09:42:53

JAVA類JVM指令forName方法

2024-09-18 00:00:02

反射C#元數據

2024-03-01 20:59:11

C#DLL開發

2011-06-24 09:01:20

Qt QLibrary dll

2011-06-23 14:27:48

QT QLibrary 動態庫

2011-07-27 08:56:32

Oracle數據庫綁定變量軟解析

2009-10-27 10:28:33

Silverlight

2009-08-31 09:41:05

C#反射靜態方法開發

2011-05-26 15:23:34

JavaReflection

2009-08-28 16:14:26

C#實現加載動態庫

2013-08-12 09:47:41

RIP協議網絡協議

2011-08-02 11:07:42

iOS開發 UIWebView

2011-04-01 14:50:56

Java的反射機制

2009-05-19 14:13:46

.NET反射Assembly
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 麻豆精品一区二区三区在线观看 | 久久久精 | 国产婷婷在线视频 | 宅男噜噜噜66一区二区 | 国产日韩欧美激情 | 午夜看片 | 亚洲成人精品影院 | 亚洲欧美在线视频 | 91久久久www播放日本观看 | 在线观看成年视频 | 一区二区三区视频免费观看 | 成人欧美一区二区三区黑人孕妇 | 天天草狠狠干 | 免费在线性爱视频 | 日韩国产在线观看 | 国产成人在线一区 | 精品亚洲一区二区三区 | 久久综合久 | 国产激情视频网站 | 久久精品在线 | a级片在线观看 | 久久久久久国产精品 | 美女视频三区 | 一级片免费视频 | 国产精品久久精品 | 国产精品免费小视频 | 欧美日产国产成人免费图片 | 久久亚洲欧美日韩精品专区 | 亚洲97| 国产精品美女久久久久久免费 | av中文字幕在线 | 一区二区国产精品 | 久久精品美女 | av黄色国产 | 国产成人99久久亚洲综合精品 | 久久久精选 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 日韩中文字幕免费在线观看 | 国产精品三级久久久久久电影 | 国产精品久久久久久久久久久久午夜片 | 久久久精品视频免费 |