Windows .net全局程序集缓存 (GAC) 的使用
2023-11-17 本文已影响0人
CodingCode
- 定义assembly的在GAC中的属性
为一个assembly生成一个key:
C:\> sn -k myassembly.key
生成一个key文件,这个文件会被配置到assembly的配置文件里面。
定义assembly的配置属性(AssemblyInfo.cs):
using System.Reflection;
using System.Runtime.CompilerServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.0.0.1")]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("myassembly.key")]
[assembly: AssemblyKeyName("")]
和assemble源代码文件和配置属性文件一起编译:
C:\> csc.exe /out:myassembly.dll /target:library myassembly.cs AssemblyInfo.cs
- 安装
C:\> gacutil.exe /i path\to\myassembly.dll
安装到的目的路径为:%windir%\Microsoft.NET\assembly
,其下有三个子目录:
GAC_32 : for assemblies targeting 32-bit.
GAC_64 : for assemblies targeting 64-bit.
GAC_MSIL : for assemblies targeting 'Any' platform.
在上述例子中,因为没有指定target,所以会被安装到GAC_MSIL目录下面:
GAC_MSIL
+ myassembly
+ v4.0_1.0.0.1__26893dcbecf3cd71
+ myassembly.dll
其中1.0.0.1
是在配置文件中定义的版本,而26893dcbecf3cd71
是key值。
- 使用
安装完之后就是如何使用了。目前所知道的是(不完全准确,需要更新):
- csc.exe编译的时候并不能直接使用GAC中的dll
所以还需要传统本地目录下面有一份dll,然后通过/reference:path\to\dll来引用。 - GAC中的dll会在运行时自动搜索,所以也就不需要把assembly拷贝到可执行程序相同目录,或者配置.exe.config文件了。
- 删除和查询
C:\> gacutil.exe /u <assembly-name>
C:\> gacutil.exe /l <assembly-name>