GAC 与其物理路径

GAC (Global Assembly Cache) 是 .NET 框架下程序集(Assembly)的一个全局缓存。不同 CLR (Common Language Runtime, 公共语言运行时) 版本,不同平台的程序集会被缓存在不同路径下。

CLR 版本 对应 .NET 版本 程序集平台 -> 缓存位置
1.0 1.0 - -> %windir%\assembly\GAC
1.1 1.1 ->
2.0 2.0/3.0/3.5 x86 -> %windir%\assembly\GAC_32
x64 -> %windir%\assembly\GAC_64
Any CPU -> %windir%\assembly\GAC_MSIL
4 4.x (4.0-4.7) x86 -> %windir%\Microsoft.NET\assembly\GAC_32
x64 -> %windir%\Microsoft.NET\assembly\GAC_64
Any CPU -> %windir%\Microsoft.NET\assembly\GAC_MSIL

GAC 的访问顺序

当程序集(Assembly)要从 GAC 中加载依赖时,会根据自己的平台(32 位或 64 位)首先尝试加载 GAC_32 或 GAC_64 下的程序集,随后尝试 GAC_MSIL,如果在这其中都没能找到,则会尝试 GAC

如果依赖的程序集没有在 GAC 中找到,那么还会依次尝试依赖者所在的当前目录以及环境变量 PATH 中的目录。

GAC 目录下的其他文件夹

关于 GAC,我们有如下目录结构:

%windir%
├── assembly
│   ├── GAC
│   ├── GAC_32
│   ├── GAC_64
│   ├── GAC_MSIL
│   ├── NativeImages_v2.0.50727_32
│   ├── NativeImages_v2.0.50727_64
│   ├── NativeImages_v4.0.30319_32
│   ├── NativeImages_v4.0.30319_64
│   ├── temp
│   └── tmp
└── Microsoft.NET└── assembly├── GAC_32├── GAC_64└── GAC_MSIL

其中 NativeImages 目录下包含了已经通过 Ngen.exe 编译成原生代码的程序集。

tmp 目录则是用做程序集安装至 GAC 之前的一个临时目录,temp 目录则是程序集从 GAC 中卸载时所用的临时目录。

关于GAC全局程序集缓存相关推荐

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

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

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

    1. Problem 无法安装或运行此应用程序.该应用程序要求首先在"全局程序集缓存(GAC)中安装程序集MySQL Data版本6.7.4" 2. Analysis and So ...

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

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

  4. 创建一个强名称密钥文件+ 如何在 Visual C# .NET 中将程序集安装到全局程序集缓存中...

    创建强名称密钥文件 单击"开始",依次指向"程序"."Microsoft Visual Studio 2005"."Visual ...

  5. 如何在全局程序集缓存 (GAC) 中安装 DLL 文件

    要使用 Visual Studio .NET 创建小型类库项目.生成强名称,以及在 GAC 中安装项目的 .dll 文件,请执行下列步骤: 在 Visual Studio .NET 中,创建一个新 V ...

  6. 全局程序集缓存gac中安装程序集_我就不信2W字把源码拆的这么碎,你还不明白mybatis缓存...

    前言 不知道大家看到这张图感觉怎么样,不是难,一共也没有几个组件,但是真的让我想当头疼,因为在面试的时候,就这张图,对,你没看错,就这几个组件,那是让我相当难受啊 MyBatis中SQL执行的整体过程 ...

  7. 无法安装或运行应用程序。该应用程序要求首先在“全局程序集缓存(gac)”中安装程序集system.data.entity...

    目前是要打3.5 SP1 转载于:https://www.cnblogs.com/nanshouyong326/archive/2009/08/21/1551406.html

  8. 将dll添加到assembly(全局程序集缓存)

    1.copy到目录里 2.没有权限的时候 .net自带的一个工具可以将dll注册到GAC中去的,gacutil.exe. 开始菜单-Microsoft Visual Studio 2010 -Visu ...

  9. dll安装到GAC以及引用的方法【转】

    一 首先    程序集(dll) 安装到 GAC 中的方法 所谓的GAC,就是全局程序集缓存(Global Assembly Cache). 针对一些类库项目或用户控件项目在程序开发完成后,有时需要将 ...

最新文章

  1. 【Matlab】如何确定数组中存在哪几个数?
  2. 误执行了rm -fr /*之后,除了跑路还能怎么办?!
  3. C和汇编----存储类别、链接和内存管理
  4. ZStack常见问题
  5. java jframe tab_java Swing实现选项卡功能(JTabbedPane)实例代码
  6. 卸载/删除Homebrew包,包括其所有依赖项
  7. 3d打印机 模型图纸下载_如何在3D打印机上制作第一个3D模型
  8. cfd 网格划分c语言源程序,ICEM-CFD-网格划分入门 .doc
  9. kindle DXG 安装多看
  10. 类似飞秋的局域网软件_局域网办公、社交情怀工具之浅见
  11. 【图像分割】基于模糊核聚类算法KFCM实现医学图像分割matlab代码
  12. 考研大作文模板与实战(图表为主+部分图画新题型)
  13. GeniePath:Graph Neural Networks with Adaptive Receptive Paths
  14. Cython配置安装(ubuntu)
  15. 超神学院之量子计算机进展,异能等级、武器等级、文明等级及天使等级划分
  16. Python tkinter Misc类+Wm类详解
  17. Java eclipse字体大小设置
  18. JAVA学习笔记 MySQL4 - sql单表基本操作
  19. 张驰咨询:关于六西格玛,有一些常见的疑惑!
  20. 苹果手机软件升级密码_iPhone在线升级好?还是电脑上升级好?看完不再纠结

热门文章

  1. PCIe固态存储与HDD普通硬盘性能对比测试
  2. 二维数组和稀疏数组互相转化
  3. java 挂机锁屏 源码_一键锁屏 源码
  4. GRE核心词汇助记与精练-List7 坐、站、躺
  5. GRE数学入门级词汇
  6. Wireshark无法显示网卡
  7. 同济大学计算机专业考博,东南大学和同济大学的考博经历
  8. 无人驾驶实战第二课--七月在线
  9. 为了改桥接,我决定破解中兴F450G V2光猫
  10. 漫步欧洲_如何使您的发射过程在公园中漫步