当前位置:首页 » 网站技术 » .NET

什么是全局程序集缓存(GAC)

...

全局程序集缓存(GAC)    
    计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强名称 
    GAC全称是Global   Assembly   Cache,他的作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。举例而言,如果没有GAC,那么势必每个WinForm程序的目录下就都要从C:WINDOWSMicrosoft.NETFrameworkv1.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。   
    
    MSDN中有一些对GAC的介绍,您可以参考:   
    1)《Assembly Cache Viewer(Shfusion.dll)》   
    2)《Global Assembly Cache》   
    
    .NET Framework中附带了一些和GAC有关的工具,其中包括:   
    1)Gacutil.exe,一个命令行的工具,用于在GAC中浏览、添加、删除Assembly   
    2)Ngen.exe,也是一个命令行的工具,用于在GAC中创建Native   Image   
    3)mscorcfg.msc,一个MMC终端,可以图形化完成Gacutil.exe的主要功能。

    [转自:http://blog.tom.com/blog/read.php?bloggerid=1105342&blogid=53599]

继续阅读
ASP.NET2.0新特性概述
值得注意的几个.NET2.0新特性
Baidu.net将在9月26日被公开拍卖
发表评论

昵称:
最新评论
hAGsQKKTNgYdWulLR 发表于 1/22/2009 2:11:07 AM
eWpDaG hi! nice site!