关于GAC全局程序集缓存

GAC(Global Assembly Cache)是.NET框架用于存储程序集的全局缓存,根据CLR版本和平台,程序集会被缓存在不同的路径。加载时先尝试平台特定目录,如GAC_32、GAC_64,再尝试GAC_MSIL。若未找到,会查找当前目录及PATH环境变量中的路径。此外,GAC目录还包含NativeImages(预编译的原生代码)和临时目录。
摘要由CSDN通过智能技术生成

GAC 与其物理路径

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

CLR 版本对应 .NET 版本程序集平台->缓存位置
1.01.0-->%windir%\assembly\GAC
1.11.1->
2.02.0/3.0/3.5x86->%windir%\assembly\GAC_32
x64->%windir%\assembly\GAC_64
Any CPU->%windir%\assembly\GAC_MSIL
44.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 中卸载时所用的临时目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值