什么是GAC?它解决了什么问题?
每一个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?它解决了什么问题?相关推荐
- javaEE面试重点
Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation ...
- 在Windows 7解决GAC错误
调试一网站源代码出现下面的错误 错误 1 Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Version=8.0.0 ...
- GAC中部署assembly的问题总结
困扰我几天的问题,终于解决了. 将这个问题总结一下,共享出来.可能会对其他人有用. 问题是这样的,我开发了一个基于sharepoint文档库事件的工作流WorkFlow,因为开发使用的是一台winxp ...
- SharePoint2013安装组件时AppFabric时出现1603错误,解决方法:
采用PowerShell命令批量下载必备组件: 下载完成后,采用批处理命令安装必备组件. 注:SPS2013安装必备组件及批处理下载地址: 需要将必备组件放在安装文件的PrerequisiteInst ...
- .NET Framework 1.1安装出现1935错误的解决办法
系统不知道什么原因,.NET Framework 1.1不能用了,得重装,但是重装了一次,每次老是提示错误1935,如图 没有办法,上网查找相关资料,有文章介绍: "卸载Visual Stu ...
- 无法安装或运行此应用程序。该应用程序要求首先在全局程序集缓存(GAC)中安装程序集
问题:winform程序发布后,在其它电脑上安装时,弹出"无法安装或运行此应用程序.该应用程序要求首先在"全局程序集缓存(GAC)"中安装程序集" 解决(可能) ...
- 关于程序集生成失败 -- 引用的程序集没有强名称的解决办法
关于程序集生成失败 -- 引用的程序集没有强名称的解决办法 我在PetShop4程序中加入了一个业务外观层,然后在业务逻辑层(PetShop.BLL)引用这个程序集,点"生成",出 ...
- 解决了:无法加载文件或程序集'stdole, Version=7.0.3300.0'
在昨天做SSIS数据库导入到EXACL文件的时候.突然出现了 要求我重新安装什么东西!我就没有安装!结果呢 在对SSIS的控制流操作的时候, 就一直报出: 已经重新生成关系图布局,其他信息:无法将关系 ...
- 无法安装或运行此应用程序。该应用程序要求首先在“全局程序集缓存(GAC)”中安装程序集stdole版本7.0.3300.0...
无法安装或运行此应用程序.该应用程序要求首先在"全局程序集缓存(GAC)"中安装程序集stdole版本7.0.3300.0 2011年12月21日 windows系统中目录 win ...
最新文章
- QQ音乐的各种相关API
- css 中input和select混排对齐问题
- Leetcode 912.排序算法(快排)
- DHTML【9】--Javascript
- 哈尔滨工程大学ACM预热赛(A,C,H,I)
- 拓端tecdat|R语言实现LASSO回归——自己编写LASSO回归算法
- 成为黑客必须掌握的知识!
- Unexpected token
- 理解和解决requireJS的报错:MODULE NAME HAS NOT BEEN LOADED YET FOR CONTEXT
- 自然数e的故事(转)
- 计算机x线影像ppt,计算机X线摄影课件
- 信号(signal,kill,raise)
- 黑群号 阿里云 frp
- 2023中国矿业大学计算机考研信息汇总
- Word 任意页插入页码
- 使用mvn命令时出现Project ‘xx‘ is duplicated in the reactor
- is 简写 缩写_天美分析仪器研发中心(TREC)新推出高灵敏度积分球IS-2600
- 5个借势小技巧,教你打造中秋爆款营销活动
- 中国“新一线”城市排名公布
- 唐诗宋词 v2.0 v2.1 v2.2 软件下载 诗词库更新时间20090427 唐诗宋词三百首