上篇文章,尽管咱们现已知道能够重写的办法和特点,以及怎么更改CLR运用的默许使用程序域管理器。今日,咱们就来持续说说怎么将完成System.AppDomainManager的强称号程序集装置到GAC中,并终究完成运用公共言语运行时获取持久性。 程序集和大局程序集缓存 如上所述,有必要将完成System.AppDomainManager的强称号程序集装置到GAC中,可是,仍有许多问题,比方: 1.什么是程序集? 2.什么是大局程序集缓存(GAC)? 3.为什么以及怎么将强称号程序集装置到GAC中? 关于.Net Framework,程序集是一个单米,每个程序集都能够包括MSIL代码、类型、资源和清单。一切这些数据能够分组到一个文件(例如assembly.dll)或拆分红多个文件(例如assembly.dll,assembly.dll.manifest和picture.png)。应该留意的是,只需求清单就能够了。
清单包括用于描述程序集的一切信息,例如程序集称号(例如Context.CLRHooking)、版别(例如1.0.0.0)、 言语文明(culture)特点特点特点(例如neutral)、强称号信息、程序会集一切文件的列表、类型引证信息和关于引证程序集的信息。称号、版别、言语文明(culture)特点特点特点和强称号的组合表明程序集的标识。 强称号程序集只不过是运用强称号密钥(SNK)文件签名的程序集,该文件运用公钥加密并为程序集供给仅有标识。 程序集能够规划为由一个使用程序运用,也能够在多个使用程序之间同享。在这种情况下,大局程序集缓存(GAC)会发挥作用,由于GAC会存储任何打算在整个体系范围内同享的程序集。 在Windows 10或Windows Server 2019等最新的体系中,都有两个GAC,一个坐落“C:Windowsassembly”,用于在4.0版之前运用.Net Framework的使用程序,另一个坐落“C:WindowsMicrosoft.NETassembly”适用于运用.Net Framework 4.0及以上版别的使用程序。 有两种惯例办法能够将程序集装置到GAC中; 1.装置使用程序时,Microsoft装置程序将主动将需求在GAC中的任何程序集装置到GAC中; 2.经过运用Windows软件开发东西包(SDK)中的GAC东西“gacutil.exe”。 由于方针体系不太可能装置Windows SDK,而且装置使用程序不方便,因而应选用其他解决方案。应该留意,不管运用何种技能,都需求管理权限才能将强称号程序集装置到GAC中。 尽管能够手动装置,可是,需求提早了解GAC怎么存储程序集。 GAC的根文件夹包括三个文件夹,其间 'GAC_32'包括32位程序集,'GAC_64'包括64位程序集,'GAC_MSIL'包括针对任何渠道的程序集。
假如强称号程序集装置到'AC_MSIL'文件夹中,则32位和64位运行时主机都能够运用它。 经过剖析已装置到GAC中的强称号程序集,能够找到强称号程序集运用的全名和.Net Framework版别。 'System.Reflection.Assembly'中的'LoadFrom'静态办法用于将程序集加载并存储到变量中。从此变量中,能够拜访“FullName”和“ImageRuntimeVersion”特点。
程序集的全名是 ‘Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ ,.Net Framework版别是“v4.0.30319”。该程序集坐落:‘Accessibilityv4.0_4.0.0.0__ b03f5f7f11d50a3a’。 根据以上所述,能够得出结论,当运用Microsoft装置程序或GAC东西将程序集装置到GAC中时,它们首要创立一个名为“GAC_32”,“GAC_64”或“GAC_64”下程序集称号的文件夹。 “GAC_32”,“GAC_64”或“GAC_64”都是根据编译程序集的渠道。然后,创立一个子目录,该目录的称号根据程序集的标识。 格局如下: 1.“v”字符+ .Net Framework版别+“_”字符的首要版别; 2.程序集的版别+“_”字符; 3. 言语文明(culture)特点特点特点假如不是中性+“_”字; 4.程序集强称号; 例如,假如强称号程序集全名为“Context.Hook,Version = 0.0.0.0,Culture = en,PublicKeyToken = 343c81d3defacaa9”且运行时版别为“v4.0.30319”,则程序集理论上应坐落:“C: Windows Microsoft.Net assembly GAC_MSIL Context.Hook v4.0_0.0.0.0_en_343c81d3defacaa9 ”。 要主动将程序集装置到GAC中,能够运用以下PowerShell脚本:https://gitlab.com/snippets/1878274。
最终,需求将程序集装置到GAC中的原因是它们需求彻底受信赖,但也由于运行时主机具有一种特定的办法来定位和将程序集嵌入到体系上。 实际上,CLR执行了四个过程。首要,CLR查看使用程序配置文件、发布服务器战略文件和机器配置文件,以便定位有必要加载的程序集和依靠项。其次,CLR查看运行时主机或使用程序域是否现已加载了程序集。假如现已加载,CLR将运用从前加载的程序集。第三,假如恳求强称号程序集,CLR将在GAC中搜索强称号程序集。最终,假如程序集不是强称号程序集或在GAC中找不到,则CLR将勘探使用程序库。 假如强称号程序集不引证言语文明(culture)特点特点特点(即中性),则CLR将勘探以下目录:[1][2][3]黑客接单网