代刷网站推广链接0元价格,专业人士怎样建网站,网站开发的风险与风险管理,农业信息免费发布平台原文标题#xff1a; 原文地址#xff1a;https://www.cnblogs.com/1996V/p/9037603.html 共享程序集GAC 我上面说了这么多有关CLR加载程序集的细节和规则#xff0c;事实上#xff0c;类似于mscorlib.dll、System.dll这样的FCL类库被引用的如此频繁#xff0c;它已经是我… 原文标题 原文地址https://www.cnblogs.com/1996V/p/9037603.html 共享程序集GAC 我上面说了这么多有关CLR加载程序集的细节和规则事实上类似于mscorlib.dll、System.dll这样的FCL类库被引用的如此频繁它已经是我们.NET编程中必不可少的一部分几尽每个项目都会引用为了不再每次使用的时候都复制一份所以计算机上有一个位置专门存储这些我们都会用到的程序集叫做全局程序集缓存(Global Assembly Cache,GAC)这个位置一般位于C:\Windows\Microsoft.NET\assembly和3.5之前版本的C:\Windows\assembly。既然是共享存放的位置那不可避免的会遇到文件名重复的情况那么为了杜绝该类情况规定在GAC中只能存在强名称程序集每当CLR要加载强名称程序集时会先通过标识去GAC中查找而考虑到程序集文件名称一致但版本文化等复杂的情况所以GAC有自己的一套目录结构。我们如果想将自己的程序集放入GAC中那么就必须先签名然后通过如gacutil.exe工具(其存在于命令行工具中 https://docs.microsoft.com/zh-cn/dotnet/framework/tools/developer-command-prompt-for-vs中)来注册至GAC中值得一提的是在将强名称程序集安装在GAC中会效验签名。 GAC工具 https://docs.microsoft.com/en-us/dotnet/framework/tools/gacutil-exe-gac-tool 延伸 CLR是按需加载程序集的没有执行代码也就没有调用相应的指令没有相应的指令CLR也不会对其进行相应的操作。 当我们执行Environment.CurrentDirectory这段代码的时候CLR首先要获取Environment类型信息通过自身元数据得知其存在mscorlib.dll程序集中所以CLR要加载该程序集而mscorlib.dll又由于其地位特殊早在CLR初始化的时候就已经被类型加载器自动加载至内存中所以这行代码可以直接在内存中读取到类型的方法信息。在这个章节我虽然描述了CLR搜索程序集的规则但事实上加载程序集读取类型信息远远没有这么简单这涉及到了属于.NET Framework独有的应用程序域概念和内存信息的查找。 简单延伸两个问题mscorlib.dll被加载在哪里内存堆中又是什么样的一个情况 转载于:https://www.cnblogs.com/Tpf386/p/9798630.html