C#疑问知识 红太狼 2022-09-29 06:34 161阅读 0赞 全局程序集缓存 全局程序集缓存(GAC): 计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强名称。 GAC全称是Global Assembly Cache,他的作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。举例而言,如果没有GAC,那么势必每个WinForm程序的目录下就都要从C:\\WINDOWS\\Microsoft.NET\\Framework\\v1.0.3705下面拷贝一份System.Windows.Forms.dll,这样显然不如都从GAC里面取用方便,也有利于Assembly的升级和版本控制。 除了系统默认放置在GAC中的Assembly如System.Windows.Forms以外,我们也可以添加自己的Assembly: 1)创建一个strong-name的Assembly,例如ToolbarComponent.dll。 2)运行gacutil -i ToolbarComponent.dll,把这个Assembly添加到GAC。 3)在程序中动态装载: System.Reflection.Assembly ass=Assembly.Load( "ToolbarComponent, Version=1.0.934.20434, Culture=neutral, PublicKeyToken=65f45658c8d4927f "); MessageBox.Show( "Is the assembly loaded from GAC? "+ass.GlobalAssemblyCache)。 在上面的程序中,ToolbarComponent就是从GAC装载而不是从程序的运行目录下的dll文件中装载,程序目录下不需要放置ToolbarComponent.dll程序也能正常运行。另外,Assembly.Load()中的参数可以通过 "gacutil -l "查到。 另外,上面提到了GAC中的Assembly必须是strong-name的。创建strong-name的Assembly的步骤大致如下: a) 在命令行运行“sn -k keyPair.snk”创建一个密钥文件。这里的sn.exe也是.NET附带的一个工具。 b) 在VS.NET里面修改“AssemblyInfo.cs”文件: \[assembly: AssemblyDelaySign(false)\] \[assembly: AssemblyKeyFile( "..\\\\..\\\\keyPair.snk ")\] c) 编译项目,就能得到一个strong-name的Assembly。 .NET Framework中附带了一些和GAC有关的工具,其中包括: 1)Gacutil.exe,一个命令行的工具,用于在GAC中浏览、添加、删除Assembly。 2)Ngen.exe,也是一个命令行的工具,用于在GAC中创建Native Image。 3)mscorcfg.msc,一个MMC终端,可以图形化完成Gacutil.exe的主要功能。 从命令行查看GAC,可以看到内部有很多目录结构,GAC\_32主要存放x86的一些代码缓存,GAC\_64主要存放x64的一些相关dll。 ![2012052400032320.gif][] MSDN中有一些对GAC的介绍,可以参考: 1)《Assembly Cache Viewer (Shfusion.dll)》 2)《Global Assembly Cache》 [2012052400032320.gif]: /images/20220708/725133c72c9e43cf856954673513f92d.png
相关 C/C++基础知识 文字目录 数组和指针的区别 指针数组和数组指针 字符数组和字符串常量 引用和指针的区别 C++中class和struct的区别 new 桃扇骨/ 2023年01月10日 10:20/ 0 赞/ 256 阅读
相关 C#疑问知识 全局程序集缓存 全局程序集缓存(GAC): 计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强 红太狼/ 2022年09月29日 06:34/ 0 赞/ 162 阅读
相关 STL 疑问 [为什么STL中的vector和deque类模板中没有sort函数,而list类模板中有sort函数?][STL_vector_deque_sort_list_sort] 绝地灬酷狼/ 2022年08月20日 11:21/ 0 赞/ 168 阅读
相关 Linux疑问---------文件系统的疑问---????? 关于文件系统我的相关疑问: 1.给出一个路径,文件系统是如何找到相应文件的??? 2.文件系统是如何管理目录名的??? 3.文件系统是如何定位文件的??? 4.是如何搜 柔情只为你懂/ 2022年08月03日 13:45/ 0 赞/ 214 阅读
相关 疑问 var msg="今晚308,w84u"; for(var i=0,arr=[];i<msg.length;i++) { var code=ms 桃扇骨/ 2022年07月13日 01:07/ 0 赞/ 199 阅读
相关 c++知识 虚函数 多态性是面向对象语言的基本特征,多态性可以简单地概括为“一个接口,多种方法”。多态性分为静态多态性(编译过程中绑定)和动态多态性。 函数重载(和运算符重载)属 ﹏ヽ暗。殇╰゛Y/ 2022年06月17日 12:52/ 0 赞/ 177 阅读
相关 疑问chatterbot ChatterBot使用哪种机器学习? \-------------------------------------------------- - 简而言 喜欢ヅ旅行/ 2022年05月25日 02:24/ 0 赞/ 205 阅读
相关 C/C++基础知识 C/C++语言 C语言基础 -------------------- 00. 目录 C/C++语言 00. 目录 1 快来打我*/ 2022年05月23日 00:19/ 0 赞/ 434 阅读
相关 C++知识点 1. 声明为const 的数据成员不能出现任何可能改变成员的操作,如: 常成员函数不能出现赋值语句不能调用非常成员函数。 常对象只能调用常成员函数。 类的 逃离我推掉我的手/ 2022年04月02日 07:09/ 0 赞/ 308 阅读
相关 C++知识点 1、 main 函数执行以前,还会执行什么代码? 答案:全局对象的构造函数会在main 函数之前执行。 2、delete与 delete \[\]区别: delete 古城微笑少年丶/ 2022年02月24日 16:22/ 0 赞/ 271 阅读
还没有评论,来说两句吧...