每一个CLR(Common Language Runtime)所在的计算机都有一个全局程序集缓存(Global Assembly Cache,GAC)。部署在GAC上的程序集必须有一个强名称。一种由.net framework sdk提供的名叫 "Global Assembly Cache tool" (Gacutil.exe)的开发工具,可以把程序集部署到GAC上。GAC存储专门指定的程序集以供计算机上多个应用程序共享。它也为我们提供了克服"DLL地狱"的问题。

百度百科上的解释:

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。   
   
  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的主要功能。

什么是GAC?它解决了什么问题?相关推荐

  1. javaEE面试重点

    Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation ...

  2. 在Windows 7解决GAC错误

    调试一网站源代码出现下面的错误 错误 1 Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Version=8.0.0 ...

  3. GAC中部署assembly的问题总结

    困扰我几天的问题,终于解决了. 将这个问题总结一下,共享出来.可能会对其他人有用. 问题是这样的,我开发了一个基于sharepoint文档库事件的工作流WorkFlow,因为开发使用的是一台winxp ...

  4. SharePoint2013安装组件时AppFabric时出现1603错误,解决方法:

    采用PowerShell命令批量下载必备组件: 下载完成后,采用批处理命令安装必备组件. 注:SPS2013安装必备组件及批处理下载地址: 需要将必备组件放在安装文件的PrerequisiteInst ...

  5. .NET Framework 1.1安装出现1935错误的解决办法

    系统不知道什么原因,.NET Framework 1.1不能用了,得重装,但是重装了一次,每次老是提示错误1935,如图 没有办法,上网查找相关资料,有文章介绍: "卸载Visual Stu ...

  6. 无法安装或运行此应用程序。该应用程序要求首先在全局程序集缓存(GAC)中安装程序集

    问题:winform程序发布后,在其它电脑上安装时,弹出"无法安装或运行此应用程序.该应用程序要求首先在"全局程序集缓存(GAC)"中安装程序集" 解决(可能) ...

  7. 关于程序集生成失败 -- 引用的程序集没有强名称的解决办法

    关于程序集生成失败 -- 引用的程序集没有强名称的解决办法 我在PetShop4程序中加入了一个业务外观层,然后在业务逻辑层(PetShop.BLL)引用这个程序集,点"生成",出 ...

  8. 解决了:无法加载文件或程序集'stdole, Version=7.0.3300.0'

    在昨天做SSIS数据库导入到EXACL文件的时候.突然出现了 要求我重新安装什么东西!我就没有安装!结果呢 在对SSIS的控制流操作的时候, 就一直报出: 已经重新生成关系图布局,其他信息:无法将关系 ...

  9. 无法安装或运行此应用程序。该应用程序要求首先在“全局程序集缓存(GAC)”中安装程序集stdole版本7.0.3300.0...

    无法安装或运行此应用程序.该应用程序要求首先在"全局程序集缓存(GAC)"中安装程序集stdole版本7.0.3300.0 2011年12月21日 windows系统中目录 win ...

最新文章

  1. QQ音乐的各种相关API
  2. css 中input和select混排对齐问题
  3. Leetcode 912.排序算法(快排)
  4. DHTML【9】--Javascript
  5. 哈尔滨工程大学ACM预热赛(A,C,H,I)
  6. 拓端tecdat|R语言实现LASSO回归——自己编写LASSO回归算法
  7. 成为黑客必须掌握的知识!
  8. Unexpected token
  9. 理解和解决requireJS的报错:MODULE NAME HAS NOT BEEN LOADED YET FOR CONTEXT
  10. 自然数e的故事(转)
  11. 计算机x线影像ppt,计算机X线摄影课件
  12. 信号(signal,kill,raise)
  13. 黑群号 阿里云 frp
  14. 2023中国矿业大学计算机考研信息汇总
  15. Word 任意页插入页码
  16. 使用mvn命令时出现Project ‘xx‘ is duplicated in the reactor
  17. is 简写 缩写_天美分析仪器研发中心(TREC)新推出高灵敏度积分球IS-2600
  18. 5个借势小技巧,教你打造中秋爆款营销活动
  19. 中国“新一线”城市排名公布
  20. 唐诗宋词 v2.0 v2.1 v2.2 软件下载 诗词库更新时间20090427 唐诗宋词三百首

热门文章

  1. OpenMP入门及基本用法
  2. 骗子qq541697068,教你如何安装MAC
  3. 电容充放电 课堂笔记2
  4. [转]基于粒子滤波的TBD算法仿真----MATLAB仿真
  5. Mac移动硬盘数据恢复:轻松恢复删除/格式化的文档
  6. Python基础之输入输出
  7. TL138-EVMLinux内核编译方法
  8. 基于arduino控制带编码器直流电机速度
  9. wrod2010软件计算机在线考试,全国计算机高新技术考试,office2010高级-试题1
  10. 性能测试-地铁模型分析