首页 > 代码库 > C#程序集系列11,全局程序集缓存

C#程序集系列11,全局程序集缓存

全局程序集缓存(GAC:Global Assembly Cache)用来存放可能被多次使用的强名称程序集。当主程序需要加载程序集的时候,优先选择到全局程序集缓存中去找寻需要的程序集。

 

为什么需要全局程序集缓存?
假设程序A引用B程序集,程序C也引用B程序集,在这种情况下,可以把B程序集放到一个全局程序集缓存中是明智的做法。

 

□ 使用全局缓存程序集

→删除F盘as文件夹中所有dll和exe后缀的文件
→编译Cow.cs成程序集
74

→把刚创建的Farm.dll存放到全局程序集缓存中
75
报错是因为,非强名称程序集是无法保存到全局程序集缓存中的。

→重新编译Cow.cs,这次使用密匙
76
→再次把Farm.dll存放到全局程序集缓存中
77

如果想把一个强名称程序集从全局缓存中取出:gacutil -u farm
→编译MainClass.cs成可执行文件,引用Farm.dll
78
→用记事本打开MainClass.cs,修改如下,保存

using System;
class MainClass
{
    static void Main()
    {
        Cow.Moo();
        Cow.Moo();
        Cow.Moo();
    }
}

→再次编译MainClass.cs,引用现在已经在全局程序集缓存中的Farm.dll
80
→把Farm.dll从as文件夹中删除,因为已经存放到全局程序集缓存中了
79
→再次运行MainClass.exe和AnotherMainClass.exe
81
说明已经在使用全局程序集缓存中的Farm.dll了。

 

□ 全局缓存程序集在哪里

在"C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Farm\v4.0_3.3.3.3__863de8402b3a9978"文件夹中

 

总结:
○ 当程序集可能被多次引用,可以考虑把程序集放入全局程序集缓存
○ 自定义程序集和.NET默认的一些程序集,都被放在"C:\Windows\Microsoft.NET\assembly\GAC_MSIL"了这个全局程序集缓存文件夹中
○ C#编译器会先优先到全局程序集缓存中找寻程序集

 

C#程序集系列11,全局程序集缓存