共享程序集和强命名程序集(2):全局程序缓存和引用

知道如何创建强命名程序集之后,要学习如何部署,以及CLR如何利用信息定位并加载程序集(GAC)。GAC的具体位置会随着不同版本变化。

开发和测试时可以使用GACUtil.exe。路径是"C:Program Files (x86)Microsoft SDKsWindowsv7.0ABin"。可以查看用法:

使用/i开关将程序集安装到GAC,/u开关从GAC卸载程序集。

在生成的程序集中引用强命名的程序集

你生成的任何程序集都包含对其他强命名程序集的引用,这是因为System.Object在MSCorLib.dll中定义,而后者是强命名的程序集。此外,程序集还可以引用由Microsoft、第三方厂商或者自己公司发布的其他强命名程序集。可以使用CSC.exe的/reference编译器开关指定想引用的程序集文件名。

如果文件名是完整路径,CSC.exe就会加载指定文件,并根据元数据生成程序集。如果是不包含路径的文件名,CSC.exe会尝试在以下路径寻找程序集(按顺序):

1.工作目录

2.CSC.exe所在目录

3.使用/lib编译器开关指定的任何目录

4.使用LIB环境变量指定的任何目录。

在安装.NET Framework时,实际会安装Microsoft的程序集文件的两套拷贝。一套安装到编译器/CLR目录,另一套安装到GAC的子目录。编译器/CLR目录中的文件方便生成程序集,GAC中的拷贝方便在运行时加载。

除此之外,编译器/CLR目录中的程序集不依赖机器。也就是说,这些程序集只包含元数据。因为编译的时候不需要IL代码,所以该目录不必同时包含程序集的x86、x64和ARM版本。GAC中的程序集才能同时包含元数据和IL代码,因为仅在运行时才需要代码。

原文地址:https://www.cnblogs.com/renzhoushan/p/10394706.html