GAC中的所有的Assembly都会存放在系统目录%winroot%/assembly下面
是的,GAC中的所有的Assembly都会存放在系统目录"%winroot%/assembly下面。放在系统目录下的好处之一是可以让系统管理员通过用户权限来控制Assembly的访问。
关于GAC本身,上面redcaff_l所引述的一段话正是MSDN中对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。
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中的所有的Assembly都会存放在系统目录%winroot%/assembly下面相关推荐
- GAC中部署assembly的问题总结
困扰我几天的问题,终于解决了. 将这个问题总结一下,共享出来.可能会对其他人有用. 问题是这样的,我开发了一个基于sharepoint文档库事件的工作流WorkFlow,因为开发使用的是一台winxp ...
- 复制GAC中的DLL
具体步骤:在项目中引入第三方的dll,一般情况下我们都可以将所需的dll文件复制到硬盘上的一个地方,然后在项目中添加引用,这个操作很简单!但有时候我们会遇到这样的情况,就是所要引用的dll在目标机器的 ...
- 无法安装或运行此应用程序。该应用程序要求首先在“全局程序集缓存(GAC)”中安装程序集stdole版本7.0.3300.0...
无法安装或运行此应用程序.该应用程序要求首先在"全局程序集缓存(GAC)"中安装程序集stdole版本7.0.3300.0 2011年12月21日 windows系统中目录 win ...
- 如何在全局程序集缓存 (GAC) 中安装 DLL 文件
要使用 Visual Studio .NET 创建小型类库项目.生成强名称,以及在 GAC 中安装项目的 .dll 文件,请执行下列步骤: 在 Visual Studio .NET 中,创建一个新 V ...
- 深入浅出Powershell——拷贝GAC中dll文件
场景:我们在客户的VM环境中进行SharePoint的开发工作,由于权限的限制(连IE的设置都无法修改),我们在很多情况除了以Administrator的身份执行应用程序(IE,VS2010,cmd窗 ...
- 不使用GACUtil.exe,如何部署和卸载程序集到GAC中
在Windows Server 2008和Windows Server 2008 上, 部署程序集到GAC中时,如果以直接将程序集拖拽到GAC的方式部署,将会得到Access is denied的错误 ...
- const、static型数据在内存中如何存储?(变量存放位置)
const.static型数据在内存中如何存储?(变量存放位置) static int val_a = 1 ; // 初始化的静态变量 int val_b = 2 ; // 全局变量 const in ...
- C语言试题三十五之找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
1. 题目 请编写一个函数function,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回.主函数中x是数组名,n 是x中的数据个数,max存放最大值,i ...
- C语言将字符串s连接到t的后面,下列给定程序中,函数fun的功能是:先将字符串s中的字符按正序存放到字符串t..._考试资料网...
问答题下列给定程序中,函数fun的功能是:先将字符串s中的字符按正序存放到字符串t中,然后把s中的字符按逆序连接到字符串t的后面. 例如,当s中的字符串为"ABCDE"时,则t中的 ...
最新文章
- 告别人工标注!仅靠合成数据就能实现真实人脸分析!
- 入门Qt——hello, world
- 2020“高教社”杯全国大学生数学建模竞赛——建模国赛优秀论文
- C socket demo
- c语言循环链表中设立尾链表,C语言实现双向非循环链表(带头结点尾结点)的节点插入...
- PE下如何安装 安装版系统
- winfrom axacropdf预览pdf怎么一直显示_PDF合并怎么做?分享多个PDF文件合并的方法...
- SQL Server将一列的多行内容拼接成一行的实现方法
- 华为ensp命令大全_计算机网络 实验六----eNSP基础解答
- 敏感词过滤算法对比,顺便开源了个工具库
- 用u盘进不了pe计算机意外地,u盘装系统启动不了无法进入pe怎么办
- 笔记本计算机内存都多大,你的电脑速度慢吗?笔记本电脑“内存”到底要多大才够用?...
- 号外,号外,《React Native移动开发实战》出版啦
- 红帽linux挂载光盘_redhat挂载光盘 命令 - 卡饭网
- matlab gui双音拨号,电子信息毕业设计---双音多频拨号系统的MATLAB仿真实现
- 【Python】多图形混合排版,如何在Matplotlib/Seaborn中实现?
- 字节辟谣被裁员工与 HR 互殴;苹果头显多个新功能曝光;谷歌希望 RISC-V 成为 T1 级 Android 架构|极客头条...
- 音频算法检测发言者方位
- Session的理解
- 安装python的pip相关
热门文章
- Redis对象的refcount与lru属性(内存回收、对象共享、空转时长)
- socket编程常见函数使用方法
- 【C++grammar】vector类和字符串字面量
- isinfinite_Java Double类isInfinite()方法与示例
- linux 内核编译需要多大空间,编译2.6.28内核出错。。。。空间不足。而/tmp/还有好几G...
- uva 10934—— Dropping water balloons
- 739. 每日温度 golang (list实现)
- C++ 对引用的理解5
- 评估报告有效期过期了怎么办_托福成绩过期了怎么办?
- 编写Shell脚本(批处理,一次执行多条命令)