Dot-Net

如何在 .NET 中解析程序集?

  • May 14, 2015

如何在 .NET 中解析程序集。我的意思是,如何解析具有完全限定名稱的程序集。我對公鑰/私鑰令牌和強命名感到困惑。謝謝

**編輯:**我也讀過延遲簽名之類的東西。人們真的會使用它嗎?(有沒有人實際使用過延遲簽名)誰生成了對程序集進行簽名的密鑰。如果我問的問題太多,我很抱歉。但是,我對這整件事感到困惑。

強命名與“公鑰令牌”一起使用以生成程序集完整顯示名稱( mscorlib, version=2.0.0.0, Culture=neutral, PublicKeyToken=b4778,.....)。這使我們能夠在同一個應用程序目錄中並排擁有同一個程序集的多個版本。

公鑰令牌(因此,字元串命名技術)還允許 .NET 載入程序檢測自您分發程序集內容以來是否有人篡改了它。這是真的,因為當您使用“私有令牌”簽署程序集時,編譯器將生成一個雜湊值,該雜湊值嵌入到描述“私有令牌”的公共部分的程序集元數據中。然後,載入程序可以使用此值來確定您的程序集是否被修改。

關於解決程序集,有一些基本的事情需要考慮:

  • 探測 載入器嘗試使用基本目錄“探測”技術定位程序集。這意味著它將嘗試MyAssembly.dll在應用程序的啟動目錄中找到“”(例如),如果沒有,則在該目錄下的子目錄中。如果探測未能找到“ MyAssembly.dll”,則觸發AppDomain‘事件。AssemblyResolve
  • 機器/使用者/系統配置machine.config和是本地儲存在系統上 的配置文件user.configsystem.config可用於更改“機器”、“使用者”或“系統”範圍設置上的程序集解析器的行為。
  • 發布 者策略 可以使用<assemblyIdentity>應用程序配置文件中的“” XML 標記(例如,“ MyApp.exe.config”)將解析器指向程序集的某個版本或從不同位置載入程序集。
  • 自定義解析 處理“ AssemblyResolve”事件AppDomain。每當無法通過“傳統”方法解決程序集時,就會引發此事件

到目前為止,最簡單的機制是處理“AssemblyResolve”事件。

總而言之,解析器在目前目錄或全域程序集記憶體中查找,處理策略,然後最終允許自定義解析。

引用自:https://stackoverflow.com/questions/1235253